Railsコントローラー・View・モデルの作成

遂にRailsアプリリリース!...エロ動画サイトだけどな!!


RailsアプリケーションはMVCモデルであり、この3つが無いと始まりません。

1.コントローラー
コントローラーを作成するには、下記のコマンドを実行。

script/rails generate controller movie

movieはコントローラー名です。
この時ビューも作成されている。
コントローラー:app/controller/movie.rb
ビュー:app/view/~.html.erb
ビューはmovie.rb内に定義されるアクションに対応して作成されるので、アクションを追加した場合は自分で作成、編集します。


2.モデル
モデルを作るには、

  1. マイグレーションファイルの生成
  2. マイグレーションの実行

の順で行う。

マイグレーションファイルの生成は以下のように。ここではmovie_id(number)title(string)のカラムを持つモデルmovieを作成する。

script/rails generate model movie movie_id:number,title:string

コマンドを実行すると、db/migrateの配下に、YYYYMMDDHHMMSS_create_movies.rbが作成される。(create_moviesは指定したモデルの名前で自動的にセットされる。create以外のパターンは後述。)

class CreateMovies < ActiveRecord::Migration                                              
  def change 
     create_table :movies do |t|                                                           
       t.string :movie_id   
       t.string :title
       t.timestamps                                                                        
     end                                                                                   
  end                                                                                     
end  

タイムスタンプは勝手に付く。あとファイルには書いてないけど、idカラムが主キーとして自動的に組み込まれる。


で、このファイルに対してマイグレーションを行うと実際にchangeメソッドの内容が実行され、DB上にテーブルが作成される。

rake db:migrate

マイグレーションはファイル名と現在の(railsアプリ上の)DBバージョンを見て自動的に実行するファイルが選択される。もしもバージョンを指定して実行したい場合は

rake db:migrate VERSION=バージョン(上記で言うYYYYMMDDHHMMSS)

その他のオプションは下記を参照。
参考:rake db:migrate - リファレンス - - Railsドキュメント


さらに、既存のモデルにカラムを追加する等の変更操作を行う場合。次のコマンドはmovieにimageカラムを追加する事を想定。

script/rails generate migration AddImage

すると、db/migrate/YYYYMMDDHHMMSS_add_image.rbのようなファイルが作られる。
が、このファイル自体は中身が空。変更を適用した場合とバージョンを戻した場合の2つのメソッドを自分で定義しておく。

class AddImage < ActiveRecord::Migration                                             
  def up                                                                                  
    add_column(:movies,:image,:string,:default => '', :null => false)                     
  end                                                                                        
  def down                                                                                
    remove_column(:movies,:image)                                                     
  end                      
end    

中身は空と言いましたが、クラス名とup、downのメソッドは既に書かれているかと思います。
ちなみにオプションも載せて見ました。:default=>''はカラムのデフォルト値指定、:null=>falseはNOT NULL制約の設定。trueならNULLでもOK。


後はrake db:migrateを実行するのみです。
マイグレーションの定義は多彩なのでそのたびに調べた方がいいですね。


今日はこのへんで。