创建迁移文件时分配默认值
Posted
技术标签:
【中文标题】创建迁移文件时分配默认值【英文标题】:Assigning default value while creating migration file 【发布时间】:2011-09-04 07:26:17 【问题描述】:rails generate migration AddRetweetsCountToTweet retweets_count:integer
好的,我使用上面的行来创建迁移文件,该文件会在生成的文件中自动生成代码,以将一列添加到数据类型为整数的模型推文。现在我想在生成迁移文件时为添加的列添加默认值。那可能吗?我用谷歌搜索但找不到。伙计们需要帮助。
【问题讨论】:
参见 RailsGuide 关于这个主题:guides.rubyonrails.org/migrations.html 您要查找的信息在第一部分“迁移剖析”中 我完全明白你的意思。我也一直在尝试设置默认值,尝试查找信息有点痛苦。仅生成裸 SQL 更容易,但版本控制中没有迁移。 【参考方案1】:您必须首先为模型基础创建迁移,然后创建另一个迁移以使用 change_column 修改您以前的迁移...
def change
change_column :widgets, :colour, :string, default: 'red'
end
【讨论】:
【参考方案2】:默认迁移生成器不处理默认值(支持column modifiers,但不包括default
或null
),但您可以创建自己的生成器。
您还可以在运行rake db:migrate
之前手动更新迁移文件,方法是将选项添加到add_column
:
add_column :tweet, :retweets_count, :integer, :null => false, :default => 0
...阅读Rails API
【讨论】:
好的,谢谢您的回复。我认为如果默认迁移生成器提供处理默认值的选项会很棒,这样我就不必在生成迁移文件后编辑迁移文件以指定默认值。【参考方案3】:我在迁移文件中尝试了 t.boolean :active, :default => 1 来创建整个表。在我签入数据库时运行该迁移后,它变为空。即使我告诉默认为“1”。在那之后,我稍微改变了迁移文件,然后它为我设置了创建表迁移文件的默认值。
t.boolean :active, :null => false,:default =>1。为我工作。
我的 Rails 框架版本是 4.0.0
【讨论】:
【参考方案4】:是的,我也看不到如何在迁移生成器命令中使用“默认”,但能够通过在应用“rake db:migrate”之前修改生成的迁移文件来为新字符串列指定默认值,如下所示":
class AddColumnToWidgets < ActiveRecord::Migration
def change
add_column :widgets, :colour, :string, default: 'red'
end
end
这会在我的“小部件”模型中添加一个名为“颜色”的新列,并将新小部件的默认“颜色”设置为“红色”。
【讨论】:
(这是在 Rails 4.2 中。)【参考方案5】:t.integer :retweets_count, :default => 0
...应该可以工作。
见Rails guide on migrations
【讨论】:
以上是关于创建迁移文件时分配默认值的主要内容,如果未能解决你的问题,请参考以下文章