rails generate migration AddRetweetsCountToTweet retweets_count:integer
上記の行を使用して、生成されたファイルにコードを自動的に生成し、データ型が整数のツイートにモデルを追加する移行ファイルを作成します。移行ファイルの生成中に、追加した列にデフォルト値を追加したいと思います。それは可能ですか?グーグルで見つけたが見つからなかった。みんな助けが必要です。
rails generate migration AddRetweetsCountToTweet retweets_count:integer
上記の行を使用して、生成されたファイルにコードを自動的に生成し、データ型が整数のツイートにモデルを追加する移行ファイルを作成します。移行ファイルの生成中に、追加した列にデフォルト値を追加したいと思います。それは可能ですか?グーグルで見つけたが見つからなかった。みんな助けが必要です。
回答:
デフォルトの移行ジェネレーターはデフォルト値を処理しません(列修飾子はサポートされますが、default
またはは含まれませんnull
)が、独自のジェネレーターを作成できます。
にrake db:migrate
オプションを追加して、実行前に手動で移行ファイルを更新することもできますadd_column
。
add_column :tweet, :retweets_count, :integer, :null => false, :default => 0
...そしてRails APIを読む
はい、マイグレーションジェネレーターコマンドで「デフォルト」を使用する方法もわかりませんでしたが、「rake db:migrate」を適用する前に生成されたマイグレーションファイルを修正することにより、次のように新しい文字列列のデフォルト値を指定できました。
class AddColumnToWidgets < ActiveRecord::Migration
def change
add_column :widgets, :colour, :string, default: 'red'
end
end
これにより、「色」という新しい列が「ウィジェット」モデルに追加され、新しいウィジェットのデフォルトの「色」が「赤」に設定されます。
テーブル全体を作成するために、移行ファイルでt.boolean:active、:default => 1を試しました。そのマイグレーションを実行した後、dbをチェックインするとnullになりました。デフォルトを「1」と言っていても。その後、このように移行ファイルを少し変更した後、テーブル移行ファイルの作成でデフォルト値を設定することができました。
t.boolean:active、:null => false、:default => 1。私のために働いた。
私のRailsフレームワークのバージョンは4.0.0です
:default => false
?
最初にモデルの基本的な移行を作成する必要があります。次に、change_columnを使用して以前のモデルを変更する別の移行を作成します...
def change
change_column :widgets, :colour, :string, default: 'red'
end