Как добавить к объекту nil в Rails итерации по циклу? - PullRequest
0 голосов
/ 17 января 2012
  @preComments = Comment.where(:resource_hash => resource_hash).sort(:created_at.desc).all
  @preComments.each do |comment|
    u = ::User.find_by_id comment.user_id
    p u
    @comments << @preComments
    p "HERE!!!!!"
  end

Это мой код, но @comments не определен, поэтому я получаю сообщение об ошибке:

У вас есть нулевой объект, когда вы его не ожидали!Возможно, вы ожидали экземпляр Array.Произошла ошибка при оценке nil. << </p>

Если я сначала создаю массив, то мое представление не может его прочитать.Так как мне это сделать?

Ответы [ 3 ]

1 голос
/ 17 января 2012

Проблема в том, что при первой итерации вы хотите создать массив @comments (содержащий этот элемент), но все последующие разы вы хотите поместить этот элемент в существующий массив.Возможно, есть более элегантный способ сделать это, но я обычно просто делаю это:

@comments ? @comments = [comment] : @comments << comment
0 голосов
/ 18 января 2012

Я думаю, вы должны инициализировать массив

@preComments = Comment.where(:resource_hash => resource_hash).sort(:created_at.desc).all
@comments = []
@preComments.each do |comment|
  u = ::User.find_by_id comment.user_id
  p u
  @comments << comment
  p "HERE!!!!!"
end

или когда цикл завершится, передайте значения @preComments в @ comments

@preComments = Comment.where(:resource_hash => resource_hash).sort(:created_at.desc).all
@preComments.each do |comment|
  u = ::User.find_by_id comment.user_id
  p u
  p "HERE!!!!!"
end
@comments = @preComments
0 голосов
/ 17 января 2012

Создайте массив перед циклом, используя @comments = [], затем в цикле убедитесь, что вы используете @comments << comment, а не @comments << @preComments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...