我正在尝试修复在注释表中添加列并执行一些更新的一些问题。但是整天都有这个错误:
耙子流产了!发生了错误, 所有后来的迁移都被取消了:当你没有时,你有一个零对象 期待它!你可能已经预料到了 ActiveRecord :: Base的实例。该 评估nil。[]
时发生错误
迁移代码:
class AddCommenterNameToComments < ActiveRecord::Migration
def self.up
add_column :comments, :commenter_name, :string
Comment.reset_column_information
#to update all comments with commenter name
Comment.all.each do |comment|
unless comment.is_system_message?
comment.update_attribute(:commenter_name, comment.user.name )
end
end
end
def self.down
remove_column :comments, :commenter_name
end
end
请帮助。
答案 0 :(得分:0)
关联可能不是问题,但要测试是否可以通过传入Comments表中的user_id
列来搜索User对象。所以,例如:
用OP Proposed fix
class AddCommenterNameToComments < ActiveRecord::Migration
class Comment < ActiveRecord::Base
end
class User < ActiveRecord::Base
end
def self.up
add_column :comments, :commenter_name, :string
Comment.reset_column_information
#to update all comments with commenter name
Comment.all.each do |comment|
unless comment.is_system_message?
user = User.find_by_id(comment.user_id)
if user
comment.update_attribute(:commenter_name, user.name )
else
comment.update_attribute(:commenter_name, "User deleted" )
end
end
end
end
def self.down
remove_column :comments, :commenter_name
end
end
现在说,问题可能是你在comments表中有一个user_id,它不再对应于Users表中的User对象。如果关联结果不是问题,您可能也想检查它。