【问题标题】: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 更容易,但版本控制中没有迁移。

标签: ruby-on-rails migration


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多