Простой рельс - PullRequest
       9

Простой рельс

1 голос
/ 13 июля 2011

У меня есть ассоциация «один ко многим» пользователей <-Posts. </p>

Некоторые сообщения связаны, другие имеют user_id nil.

Если в ERB я сделаю:

post.user_id? post.user.email

Я получаю

undefined method `email' for nil:NilClass

при переборе сообщений. Почему мое первоначальное условие не защищает от этого?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Я не думаю, что ваш синтаксис имеет смысл. Попробуйте:

post.user.email if post.user_id?

или

post.user_id? ? post.user.email : nil

или

if post.user_id?
    post.user.email
end

или

post.user.try(:email)

Все это должно работать. Примечание: вы также должны иметь возможность использовать post.user.present? или !post.user.nil?, которые кажутся более чистыми, чем проверка идентификатора.

0 голосов
/ 13 июля 2011

Вы должны иметь возможность немного перефразировать это, чтобы иметь больше смысла:

<%= post.user.email if post.user %>

Я не совсем понимаю ваш код, так как он не выглядит условно из того, что вы опубликовали, но вышеприведенное выражение ERB должно сработать.

Редактировать: я должен добавить, что Ruby оценивает нулевой объект как ложный в условном выражении, поэтому нет необходимости проверять user.nil?, хотя это все еще совершенно верно. Это позволяет вам делать короткие простые условные выражения, подобные приведенным выше.

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