Рельсы "неопределенный метод" ошибка внутри цикла, который не оценивается - PullRequest
0 голосов
/ 23 января 2012

Этот код работает правильно (с использованием HAML):

#comments
  - @blog.comments.each do |comment|
    .comment
      .username
        - if !eval("comment.user").nil?
          #{comment.user.email}
      .content
        #{comment.content}

Однако, если я удаляю строку "eval", то есть

#comments
  - @blog.comments.each do |comment|
    .comment
      .username
        #{comment.user.email}
      .content
        #{comment.content}

Я получаю ошибку:

undefined method `email' for nil:NilClass

Даже если в базе данных нет комментариев (следовательно, содержимое цикла не должно оцениваться).Что происходит?

Ответы [ 2 ]

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

Ах, проблема решена!

Проблема заключалась в том, что над отправленным кодом у меня была строка:

= form_for @blog.comments.build, :remote => true do |f|

Когда я перемещал эту форму ниже цикла, ошибка исчезала.

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

Попробуйте следующее:

#comments
  - @blog.comments.each do |comment|
    .comment
      .username
        - if comment.user
          = comment.user.email
      .content
        = comment.content

Я думаю, проблема в том, что вы заставляете ruby ​​оценивать comment.user.email с помощью # {comment.user.email}.

Попробуйте это в консоли:

def fail(param)
  if param
    puts "hello #{1/0}"
  end
end

fail(nil)

Не удастся из-за деления на 0, но параметр равен нулю.

...