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

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,但不包括defaultnull),但您可以创建自己的生成器。

您还可以在运行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

【讨论】:

以上是关于创建迁移文件时分配默认值的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework Core:将可空列迁移到必需时的默认值

Laravel 迁移默认值

关于Linux系统创建时分配分区问题

关于Linux系统创建时分配分区问题

架构迁移和默认值

关于Linux系统创建时分配分区问题