web-dev-qa-db-ja.com

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

Rails generate migration AddRetweetsCountToTweet retweets_count:integer 

わかりました。上記の行を使用して、生成されたファイルにコードを自動的に生成する移行ファイルを作成し、データ型整数を持つモデルTweetに列を追加します。次に、移行ファイルの生成中に追加された列にデフォルト値を追加します。それは可能ですか? Googleで検索しましたが、見つかりませんでした。みんな助けが必要です。

95
kxhitiz

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

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

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

...と読みます Rails API

158
taro
t.integer :retweets_count, :default => 0

...動作するはずです。

移行に関するレールガイド を参照してください。

42
Jits

はい、Migration Generatorコマンドで「デフォルト」を使用する方法もわかりませんでしたが、「rake db:migrate」を適用する前に生成された移行ファイルを修正することで、新しい文字列列のデフォルト値を指定できました:

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

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

6
MSC

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

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

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

3
Madhan Ayyasamy