Ruby on Rails 3 アプリケーションプログラミング

imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。

Ruby on Rails 3 アプリケーションプログラミング

サンプルコード

MVCモデル

Model:ビジネスロジック
View:ユーザーインターフェース
Controller:ModelとViewの制御

RubyとRailsのインストール on Ubuntu

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]

railsアプリケーションのよく使うフォルダ

/AppName : アプリケーションルート
/app : ソースコードを格納する
/public : HTTP経由で公開されるフォルダ
/script : railsが使用するスクリプト

HTTPサーバの起動

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 %>

scaffolding機能による開発

定型的な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 : オブジェクトを削除する
最終更新:2012年04月18日 23:53
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。