2012年8月13日月曜日

【Ruby】Railsを使ってみた(MySQL接続)【サンプルコードあり】

P.S 20140425
だいぶ手順が雑でしたので見直しました、見栄えも修正しております
またCentOS6系でも試してみましたのでCentOS6系の場合はこちらをご参照ください

■概要
Ruby on Railsを使って簡単なアプリを作ってみました
scaffold的なサンプルアプリを作成してみました

■バージョン
CentOS 5.10 64bit
Rails 3.2.7
ruby 1.9.3p125
mysql 5.0.95

■事前
ruby、railsのインストールは必須です
http://kakakikikeke.blogspot.jp/2012/04/centos56ruby.html

足りなかったインストール系は以下
gem install therubyracer
gem install execjs

■rails基本設定
cd /var/tmp
rails new "simpledbform" -d mysql
cd simpledbform/
vi Gemfile
   gem 'therubyracer'
   を追記
rake db:create
   DB作成に関してはこれで代用
rails server
   ブラウザで3000番にアクセスするとRailsのサンプルを表示
   http://localhost:3000/

■controller作成
rails generate controller sdfctl
   sdfctlは好きなアプリ名を入れてください
emacs config/routes.rb
   ここはgenerateしたコントローラの名前を記載します
match 'hello' => 'sdfctl#hello'
match 'bye' => 'sdfctl#bye'

■view設定(controllerとの連携)
touch app/views/sdfctl/hello.html.erb
touch app/views/sdfctl/bye.html.erb
   ここで作成するファイル.erbファイルはテンプレートファイルです
   テンプレートファイルはコントローラで記載したURLマッピングの名称と同値(必須ではないが)にしておくといいです

emacs app/views/sdfctl/hello.html.erb
<h1>Hello</h1>
こんにちは。お元気ですか。
<%= @msg %>
emacs app/controllers/sdfctl_controller.rb
# coding: utf-8
class SdfctlController < ApplicationController
     def hello
          #render :text => 'Hello!' ⇒これは直接テキストを表示する命令、未使用なのでコメントアウト
          @msg = "おげんきだぜー";
     end
                                                                                                                                                                                               
     def bye
          render :text => 'bye!'
     end
end
再起動して/helloにアクセスするとテンプレートを表示

■modelとDB連携
rails generate model name
invoke  active_record
create    db/migrate/20120809010634_create_names.rb
create    app/models/name.rb
invoke    test_unit
create      test/unit/name_test.rb
create      test/fixtures/names.yml

emacs db/migrate/20120809010634_create_names.rb
t.string :first_name
t.string :family_name

rake db:migrate
   migrateコマンドでテーブルを作成
emacs db/seeds.rb
# coding: utf-8
Names.create(:first_name => 'keke', :family_name => 'kakakiki')
Names.create(:first_name => 'keke2', :family_name => 'kakakiki')
emacs app/models/name.rb
attr_accessible :first_name, :family_name
   Can't mass-assign protected attributesのエラーに対応

rake db:seed --trace
   この段階でsimpledbform_developmentにレコードがインサートされるので別途mysqlコマンドで確認
   rails dbconsoleでも確認可能

emacs app/views/sdfctl/hello.html.erb
<h1>Hello</h1>
こんにちは。お元気ですか
<%= @msg %>

<% @name_all.each do |name| %>
[苗字] <%= name.family_name %>, [名前] <%= name.first_name %>

<% end %> 
emacs app/controllers/sdfctl_controller.rb
# coding: utf-8
class SdfctlController < ApplicationController
     def hello
          @sum = 1 + 1
          @msg = "おげんきだぜー";
          @name = Name.all
     end

     def bye
          render :text => 'bye!'
     end
end

rails server
でこの状態で/helloにアクセスするとDBのデータを取得してその値を取得し表示してくれると思います

以上で簡単なサンプルは完了です

■メモ
public/配下が静的ファイルを置く場所
config/routes.rbがリクエストの振り分けを行う、URLのマッピング
controllerのURLマッピングとviewのhtml.erbファイルは密接に関係
MVCモデルの設定ファイルはapp/models, views, controllersがそれぞれ対応
rubyで2バイト文字を先頭で使うときには# coding: utf-8を記載
railsではデータベースを作成する際にmigrateという機能を使用
(DBに直接コマンドを打つのではなくrails特有のスクリプトからDBを構築する手法)
rails serverは毎回行わなくてもMVCの更新でリアルタイムに反映
rubyの「:」はテキストを表している、「:text」「'test'」「"test"」は同値

0 件のコメント:

コメントを投稿