ChatGPT解决这个技术问题 Extra ChatGPT

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

rails generate migration AddRetweetsCountToTweet retweets_count:integer 

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

请参阅有关该主题的 RailsGuide:guides.rubyonrails.org/migrations.html 您要查找的信息在第一部分“迁移剖析”中
我确切地知道你的意思。我也一直在尝试设置默认值,尝试查找信息有点痛苦。仅生成裸 SQL 更容易,尽管在版本控制中没有迁移。

t
typeoneerror

默认迁移生成器不处理默认值(支持 column modifiers,但不包括 defaultnull),但您可以创建自己的生成器。

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

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

...并阅读Rails API


好的,谢谢您的回复。我认为如果默认迁移生成器提供处理默认值的选项会很棒,这样我就不必在生成迁移文件后编辑迁移文件以指定默认值。
J
Jits
t.integer :retweets_count, :default => 0

... 应该管用。

请参阅Rails guide on migrations


M
MSC

是的,我也看不到如何在迁移生成器命令中使用“默认”,但能够通过在应用“rake db:migrate”之前修改生成的迁移文件来为新的字符串列指定默认值,如下所示:

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

这会在我的“小部件”模型中添加一个名为“颜色”的新列,并将新小部件的默认“颜色”设置为“红色”。


(这是在 Rails 4.2 中。)
M
Madhan Ayyasamy

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

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

我的 Rails 框架版本是 4.0.0


A
Artur Pedrosa

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

def change
    change_column :widgets, :colour, :string, default: 'red'
end