15
18

More than 5 years have passed since last update.

rails generateコマンドでマイグレーションファイルを生成しました。

Last updated at Posted at 2014-12-14

railsのgenerateコマンドでマイグレーションをファイルを作成したので、記法などについてまとめておきます。

generateコマンドの基本

rails generateコマンドで命令する基本構文は以下になります。

generateコマンドの基本
rails generate 命令
rails g 命令

generate でも g でも動作するので短くてすむ g を使うようです。

generate scaffold でコントローラ、モデル、ビューを生成する

コントローラやモデル、ビューをすべて生成する場合はScaffoldを利用します。

Scaffold生成の基本
rails g scaffold モデル名

EventモデルをScaffoldする例

EventモデルをScaffold
bundle exec rails g scaffold Event

上記のようにgenerate scaffold では、eventのコントローラとモデルとビューを生成します。
コントローラやモデルなどを一部だけ生成したい場合は、下記のようにscaffoldの前に指定をします。

Scaffold生成の基本
rails g controller scaffold モデル名

こちらではcontroller周りのファイルだけが生成されます。

generate controller でコントローラを生成する

コントローラ生成の基本構文はgenerateにcontrollerを指定します。

コントローラ生成の基本
rails g controller コントローラ名

eventsコントローラを生成する例です。

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アクションを生成する例です。

eventsコントローラを生成
bundle exec rails g controller events index show

アクションだけでなく、ビューも生成されました。

generate model でモデルを生成

Eventモデルを生成
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コマンドでマイグレーションファイルを作成する基本構文は以下になります。

generateコマンドの基本
rails g migration マイグレーション名

add_column でカラムを追加する書き方

モデルへカラムを追加するマイグレーションファイルは、rails generate migration AddほげほげToモデル名 という構文にします。

カラムを追加するマイグレーションファイルを生成
bundle exec rails g migration AddほげほげToモデル名 カラム名:型

今回は、すでにEventモデルがある状態で、新しいカラムを追加したい場合のマイグレーションファイルを作成します。

eventsというテーブルはすでに用意してあります。このイベントモデルにカラムを追加するコマンドを実行します。

Eventモデルにカラムを追加
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

マイグレーションファイルが生成されました。

マイグレーションファイルにadd_columnを追加
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モデル名 という構文にします。

Eventモデルのカラムをリネーム
bundle exec rails g migration RenameLimitToEvent

      invoke  active_record
      create    db/migrate/20150812225456_rename_limit_to_event.rb

chageメソッドの中にリネームする設定を書きます。

Migrationファイルにrename_columnを追加
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コマンドで生成ファイルを全て削除してくれます。

gemerateコマンドの取り消し
bundle exec rails destroy 処理

generate controller の取り消し例

例えば generate controllerコマンドの指定を間違えしまった場合です。複数形のticketsでコントローラを生成したかったのに 、下記のコマンドは単数形で生成してしまいました。

間違えてコントローラを生成
bundle exec rails g controller ticket
コントローラの生成を取り消し
bundle exec rails d controller ticket

generateと同じようにdestroydと短くショートカットを用意されています。
generateコマンドで生成されたファイルが全て消えました。

参考

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18