2011-12-26 9 views
19

レールでモデル化するのが初めてです。私はそれらに列を追加する方法&モデルを作成する方法を知っています。今私は列にデフォルト値を設定したいが、私はそれがいかに正確に行うことができないのか分かっていない。私は新しいモデルにマイグレーションを作成中にレールの列にデフォルト値を設定する方法

rails g model User 

を生成

は、今、私は本当のよう通知列のデフォルトの値を設定することに

rails generate migration AddNotificationEmailToUsers notification_email:boolean 

を列を追加しました。 マイグレーションの書き方を教えてください。ありがとうございました!!!

あなたは、コマンドラインからこれを行うことはできません

答えて

44

- あなたが移行ファイルを編集し、

add_column :users, :notification_email, :boolean, :default => true 
+0

やあみんなはそれが私のために働いていない私を –

2

フレデリック・チャンのようなものに対応する行を変更する必要がありますが、あなたが移行を編集する必要があります正しいですこのためのファイル。 デフォルト値を指定する前に、データ型の後にコンマを追加するだけです。

add_column :users, :notification_email, :boolean, :default => true 
+0

助けたおかげで、レールのグラム移行AddDefaultsToTablenameのような任意の移行があります:テーブル名、:ColumnNameに:既定値は? –

+0

いいえ、これには直接的な方法はありません。これは生成された移行ファイルで動作するはずですが、どのようなエラーが表示されますか? – PriteshJ

13

ここでの最適なアプローチは、移行にchange_columnを使用することです。タイプを変更するようにアドバタイズされていますが、既存のカラムにデフォルトをアタッチするために使用できます。

私は、スキーマに

location :integer 

を持っていたと私はゼロをデフォルトとしたかったので、私のような移行書いた:

change_column :player_states, :location, :integer, :default => 0 

トリックをしました。

0

今のところ、railsの移行でterminalによって定義されたデフォルト値を指定する方法はありません。

あなたは、列

1)のデフォルト値を指定するための手順の下に実行することができます。実行

$ rails generate migration AddNotificationEmailToUsers notification_email:boolean 

2)。作成された新しいマイグレーション・ファイルを編集して、新しい列のデフォルト値をTRUE/FALSEに指定します。

class AddNotificationEmailToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :notification_email, :boolean, default: true 
    end 
end 

3)。実行によって上記の移行が実行されました。

$ rake db:migrate 
関連する問題