Проблема использования ассоциации моделей в миграции Rails - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь исправить некоторые проблемы, добавив столбец в таблицу комментариев и выполнив некоторые обновления.Но весь день с этой ошибкой:

рейк отменен!Произошла ошибка, все последующие миграции отменены:

У вас есть нулевой объект, когда вы его не ожидали!Возможно, вы ожидали экземпляр 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 голосов
/ 20 апреля 2011

Ассоциация может быть не проблемой, но чтобы проверить, если это так, вы можете выполнить поиск объекта User, передав столбец user_id из таблицы комментариев.Так, например: Отредактировано с помощью OP Предложенное исправление

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

Теперь, после сказанного, проблема может заключаться в том, что у вас есть user_id в таблице комментариев, который больше не соответствует объекту User в таблице Users.Возможно, вы также захотите проверить это, если проблема не в ассоциации.

...