在Rails迁移中使用模型关联的问题

时间:2011-04-19 20:21:02

标签: ruby-on-rails activerecord migration associations

我正在尝试修复在注释表中添加列并执行一些更新的一些问题。但是整天都有这个错误:

  耙子流产了!发生了错误,   所有后来的迁移都被取消了:

     

当你没有时,你有一个零对象   期待它!你可能已经预料到了   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

请帮助。

1 个答案:

答案 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对象。如果关联结果不是问题,您可能也想检查它。