Ruby on Rails 3 アプリケーションプログラミング
Model:ビジネスロジック View:ユーザーインターフェース Controller:ModelとViewの制御
Ruby、SQLite、Railsをインストールする。
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux] Rails 3.0.9 3.7.7 2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2
カレントディレクトリにAppNameディレクトリが出来る。
$ rails new AppName [option]
/AppName : アプリケーションルート /app : ソースコードを格納する /public : HTTP経由で公開されるフォルダ /script : railsが使用するスクリプト
AppNameディレクトリに移動して起動する。Ctrl+Cで停止。 http://localhost:3000でアクセスする。
$ cd AppName $ rails server
$ rails generate controller name [option]
以下のファイルが自動生成される。
AppName/app/controllers/name_controller.rb AppName/app/views/name AppName/app/helpers/name_helper.rb AppName/test/unit/views/helpers/name_helper_test.rb AppName/test/functional/name_controller_test.rb
generateしたファイルを削除する
$ rails destroy controller name
app/controllers/name_controller.rbにアクションメソッドを実装する。
def action
# ここに処理を書く
end
RESTfulの思想に反するため非推奨とされている。
config/routes.rb の下記の行を有効にする。
match ':controller(/:action(/:id(.:format)))'
http://localhost:3000/name/actionでアクセスする。
テンプレート変数を用いて、アクションで得られた値をビューに表示する。 テンプレート変数は、コントローラのインスタンス変数を使用する。
def action
@msg = 'メッセージ'
end
app/viewsディレクトリに、コントローラ名/アクション名.html.erbを作成し、ERB(Embedded Ruby)ノ形式で記述する。
app/views/hello/action.html.erb
renderメソッドにapp/viewsディレクトリからの相対パスを指定し、テンプレートファイルを呼び出す。
def action
@msg = 'メッセージ'
render 'hello/special'
end
コントローラ生成時にアクション名を指定する。
$ rails generate controller name action[ action2 ...] [option]
O/Rマッパー経由でRDBのテーブルを操作する。
config/database.ymlに接続の定義を書く。
モデルで管理するテーブル名と、そのフィールドを指定して生成する。
$ rails generate model record field:type[ field2:type ...] [option]
以下のファイルが生成される。
app/models/record.rb db/migtare/****************_create_records.rb test/fixtures/records.yml test/unit/record_test.rb
db/migtare/****************_create_records.rb(***は生成した日時)を、以下のコマンドで実行し、テーブルを生成する。
bundle exec rake db:migrate
test/fixtures/records.ymlにデータを作成し、以下のコマンドでデータを流し込む。
bundle exec rake db:fixtures:load FIXTURES=records.yml
データの作成は、以下の形式で記述する。
record1: field1: value field2: value record2: field1: value field2: value
DBコンソールを起動し、テーブルの構造と内容を確認する。
$ rails dbconsole sqlite> .tables sqlite> .schema records sqlite> select * from records; sqlite> .quit
Recordクラスのメソッドを使用してデータを取得する。
以下のコードでrecordsテーブルのすべてのレコードを取得できる。
def list
@records = Record.all
end
テンプレートファイルを作成する。
<% @records.each do |record| %> <%= record.field1 %> <%= record.field2 %> <% end %>
定型的なCRUD(Create-Read-Update-Delete)機能を持つアプリケーションの骨格を生成する。
モデルの生成と同様の構文。モデルで管理するテーブル名と、そのフィールドを指定して生成する。
$ rails generate scaffold record field:type[ field2:type ...] [option]
データベースの生成をおこなう。
bundle exec rake db:migrate
config/routes,rbにルートが定義されている。
bundle exec rake routes
scaffoldにより、app/controllers/records_controller.rbに、以下のアクションが生成される。 表示用アクションのテンプレートは、app/views/records/***.html.erbが生成される。 newとeditは、部分テンプレート app/views/records/_form.html.erbを使用する。
index : トップ画面を表示する show : 詳細画面を表示する new : 新規作成画面を表示する create : オブジェクトを生成する edit : 編集画面を表示する update : オブジェクトを更新する destroy : オブジェクトを削除する