创建迁移文件时分配默认值

kxh*_*tiz 97 migration ruby-on-rails

rails generate migration AddRetweetsCountToTweet retweets_count:integer 
Run Code Online (Sandbox Code Playgroud)

好吧,我使用上面的行来创建迁移文件,该文件在生成的文件中自动生成代码,以向数据类型为整数的模型Tweet添加列.现在,我想在生成迁移文件时向添加的列添加默认值.那可能吗?我用谷歌搜索但找不到.伙计们需要帮助.

tar*_*aro 160

默认迁移生成器不处理默认值(支持列修饰符但不包括defaultnull),但您可以创建自己的生成器.

您还可以在运行之前手动更新迁移文件,方法rake db:migrate是将选项添加到add_column:

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

...并阅读Rails API

  • 好的,谢谢你的回复.我认为如果默认迁移生成器提供处理默认值的选项将是很好的,这样我就不必在生成后编辑迁移文件以指定默认值. (9认同)

Jit*_*its 42

t.integer :retweets_count, :default => 0
Run Code Online (Sandbox Code Playgroud)

... 应该管用.

请参阅有关迁移Rails指南


MSC*_*MSC 7

是的,我无法在迁移生成器命令中看到如何使用"default",但是在应用"rake db:migrate"之前,通过修改生成的迁移文件,可以如下指定新字符串列的默认值:

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end
Run Code Online (Sandbox Code Playgroud)

这会在我的"Widget"模型中添加一个名为"color"的新列,并将新窗口小部件的默认"颜色"设置为"red".


Mad*_*amy 5

我尝试在迁移文件中使用 t.boolean :active, :default => 1 来创建整个表。运行该迁移后,当我签入数据库时​​,它变为空。即使我告诉默认为“1”。之后,我像这样稍微更改了迁移文件,然后它对我来说可以在创建表迁移文件上设置默认值。

t.boolean :active, :null => false,:default =>1。为我工作。

我的Rails框架版本是4.0.0