gpt4 book ai didi

ruby-on-rails - 尝试在 self.up 中创建记录时,Rails 迁移会出错

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:14 25 4
gpt4 key购买 nike

我有以下迁移:

def self.up
add_column :project_statuses, :system_sequence, :integer, :default => 0, :null => false

ProjectStatus.create :name => 'Declined', :sequence => 35, :system_sequence => 110

...
end

但是当我执行 rake db:createrake db:migrate 时,出现以下错误:

==  NewProjectStatuses: migrating =============================================
-- add_column(:project_statuses, :system_sequence, :integer, {:default=>0, :null=>false})
-> 0.0029s
rake aborted!
An error has occurred, this and all later migrations canceled:

unknown attribute: system_sequence
/Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/base.rb:1753:in `block in assign_attributes'
/Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/base.rb:1747:in `each'
/Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/base.rb:1747:in `assign_attributes'
/Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/base.rb:1567:in `initialize'
/Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/base.rb:508:in `new'
/Users/ttt/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.1.1/lib/active_record/base.rb:508:in `create'
/[working dir]/db/migrate/20100816100139_new_project_statuses.rb:7:in `up'

错误的行号是指 Project.create :name => ... 行。

似乎 add_column 行根本没有运行,即使输出显示它已运行。

再次运行 rake db:migrate 可以很好地完成迁移。

这是为什么?

最佳答案

尝试在 add_column block 之后调用 ProjectStatus.reset_column_information

Rails 缓存列信息(包括存在哪些列),我相信您在这里遇到的是您正在创建一个列,但这不会触发 Rails 在可用列列表上重置其缓存。结果,您的下一行失败了,因为它认为该列不存在。

我不确定为什么要这样设计缓存,但这种事情是 explicitly mentioned in the example code regarding the use reset_column_information。我认为这很有可能就是问题所在。

话虽这么说,我也大体上同意 Michael Durrant ,关于通过迁移使用值填充数据库。首选方法是将默认/种子数据添加到 rake 任务(可以在任意时间运行)或 seeds.rb 文件。这与迁移形成对比,后者仅在当前架构版本早于指定迁移时运行。

关于ruby-on-rails - 尝试在 self.up 中创建记录时,Rails 迁移会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com