移行ファイルの作成中にデフォルト値を割り当てる


104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

上記の行を使用して、生成されたファイルにコードを自動的に生成し、データ型が整数のツイートにモデルを追加する移行ファイルを作成します。移行ファイルの生成中に、追加した列にデフォルト値を追加したいと思います。それは可能ですか?グーグルで見つけたが見つからなかった。みんな助けが必要です。


件名についてはRailsGuideを参照してください。guides.rubyonrails.org/ migrations.html探している情報は、最初のセクション「Anatomy of a Migration
Austin Lin

1
私はあなたが何を意味するのか正確に知っています。私もデフォルト値を設定しようとし続けましたが、情報を見つけようとするのは一種の苦痛でした。ベアSQLを生成するだけの方が簡単でしたが、バージョン管理に移行はありません。
Tass

回答:


166

デフォルトの移行ジェネレーターはデフォルト値を処理しません(列修飾子はサポートされますが、defaultまたはは含まれませんnull)が、独自のジェネレーターを作成できます。

rake db:migrateオプションを追加して、実行前に手動で移行ファイルを更新することもできますadd_column

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

...そしてRails APIを読む


9
返信ありがとうございます。デフォルト値を指定するために生成された後にマイグレーションファイルを編集する必要がないように、デフォルトのマイグレーションジェネレーターがデフォルト値を処理するオプションを提供するなら素晴らしいと思いました。
kxhitiz、


9

はい、マイグレーションジェネレーターコマンドで「デフォルト」を使用する方法もわかりませんでしたが、「rake db:migrate」を適用する前に生成されたマイグレーションファイルを修正することにより、次のように新しい文字列列のデフォルト値を指定できました。

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

これにより、「色」という新しい列が「ウィジェット」モデルに追加され、新しいウィジェットのデフォルトの「色」が「赤」に設定されます。


(これはRails 4.2にありました。)
MSC

4

テーブル全体を作成するために、移行ファイルでt.boolean:active、:default => 1を試しました。そのマイグレーションを実行した後、dbをチェックインするとnullになりました。デフォルトを「1」と言っていても。その後、このように移行ファイルを少し変更した後、テーブル移行ファイルの作成でデフォルト値を設定することができました。

t.boolean:active、:null => false、:default => 1。私のために働いた。

私のRailsフレームワークのバージョンは4.0.0です


:default => false
Christopher Oezbek

2

最初にモデルの基本的な移行を作成する必要があります。次に、change_columnを使用して以前のモデルを変更する別の移行を作成します...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.