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


104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

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


请参阅有关以下主题的RailsGuide:guides.rubyonrails.org/migrations.html您正在寻找的信息在第一部分“迁移剖析”中
奥斯汀·林

1
我确切地知道你的意思。我也一直尝试设置默认值,而尝试查找信息有点麻烦。只是生成裸露的SQL更容易,但是那时版本控制中没有迁移。
塔斯(Tass)

Answers:


166

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

您还可以在运行之前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,2015年

2

您必须首先为模型基础知识创建迁移,然后创建另一个迁移以使用change_column修改以前的迁移...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.