railsのgenerateコマンドでマイグレーションをファイルを作成したので、記法などについてまとめておきます。
generateコマンドの基本
rails generateコマンドで命令する基本構文は以下になります。
rails generate 命令
rails g 命令
generate でも g でも動作するので短くてすむ g を使うようです。
generate scaffold でコントローラ、モデル、ビューを生成する
コントローラやモデル、ビューをすべて生成する場合はScaffoldを利用します。
rails g scaffold モデル名
EventモデルをScaffoldする例
bundle exec rails g scaffold Event
上記のようにgenerate scaffold
では、eventのコントローラとモデルとビューを生成します。
コントローラやモデルなどを一部だけ生成したい場合は、下記のようにscaffoldの前に指定をします。
rails g controller scaffold モデル名
こちらではcontroller周りのファイルだけが生成されます。
generate controller でコントローラを生成する
コントローラ生成の基本構文はgenerateにcontrollerを指定します。
rails g controller コントローラ名
eventsコントローラを生成する例です。
bundle exec rails g controller events
create app/controllers/events_controller.rb
invoke erb
create app/views/events
invoke rspec
create spec/controllers/events_controller_spec.rb
invoke helper
create app/helpers/events_helper.rb
invoke rspec
create spec/helpers/events_helper_spec.rb
invoke assets
invoke coffee
create app/assets/javascripts/events.coffee
invoke scss
create app/assets/stylesheets/events.scss
generate controller 時にアクションを指定する
コントローラとアクションを生成したい場合は、generateにcontrollerの後ろにアクション名を指定します。
rails g controller コントローラ名 アクション名
eventsコントローラとindex、showアクションを生成する例です。
bundle exec rails g controller events index show
アクションだけでなく、ビューも生成されました。
generate model でモデルを生成
rails g model event service:string longitude:decimal latitude:decimal event_url:string address:string started_at:datetime ended_at:datetime place:string limit:integer accepted:integer waiting:integer
マイグレーションファイルを生成
rails generateコマンドでマイグレーションファイルを作成する基本構文は以下になります。
rails g migration マイグレーション名
add_column でカラムを追加する書き方
モデルへカラムを追加するマイグレーションファイルは、rails generate migration AddほげほげToモデル名 という構文にします。
bundle exec rails g migration AddほげほげToモデル名 カラム名:型
今回は、すでにEventモデルがある状態で、新しいカラムを追加したい場合のマイグレーションファイルを作成します。
eventsというテーブルはすでに用意してあります。このイベントモデルにカラムを追加するコマンドを実行します。
bundle exec rails g migration AddColumnsToEvents service:string longitude:decimal latitude:decimal event_url:string address:string started_at:datetime ended_at:datetime place:string limit:integer accepted:integer waiting:integer
マイグレーションファイルが生成されました。
class AddColumnsToEvents < ActiveRecord::Migration
def change
add_column :events, :service, :string
add_column :events, :longitude, :decimal
add_column :events, :latitude, :decimal
add_column :events, :event_url, :string
add_column :events, :address, :string
add_column :events, :started_at, :datetime
add_column :events, :ended_at, :datetime
add_column :events, :place, :string
add_column :events, :limit, :integer
add_column :events, :accepted, :integer
add_column :events, :waiting, :integer
end
end
add_columnを使用してカラムの追加を記述します。
rename_column でカラムをリネームする書き方
モデルへカラムを追加するマイグレーションファイルは、rails g migration RenameほげほげToモデル名 という構文にします。
bundle exec rails g migration RenameLimitToEvent
invoke active_record
create db/migrate/20150812225456_rename_limit_to_event.rb
chageメソッドの中にリネームする設定を書きます。
class AddColumnsToEvents < ActiveRecord::Migration
def change
rename_column :events, :limit, :tickets_limit
end
end
rename_columnを使用してlimit
というカラムをtickets_limit
にリネームします。
migrateを実行
マイグレーションファイルを生成したら、rails:db migrateするだけで反映されました。
bundle exec rails db:migrate
以前はrakeコマンドを利用したのですが、最近はrailsコマンドから使用できるみたいです。
destroyでgenerateコマンドの取り消し
generateコマンドをTypoしてしまった場合は、generateの代わりにdestroyを指定すると、generateコマンドで生成ファイルを全て削除してくれます。
bundle exec rails destroy 処理
generate controller の取り消し例
例えば generate controller
コマンドの指定を間違えしまった場合です。複数形のtickets
でコントローラを生成したかったのに 、下記のコマンドは単数形で生成してしまいました。
bundle exec rails g controller ticket
bundle exec rails d controller ticket
generate
と同じようにdestroy
はd
と短くショートカットを用意されています。
generate
コマンドで生成されたファイルが全て消えました。