2015-04-23 2 views
1
post = Post.find 666 

ActiveRecord::RecordNotFound: Couldn't find Post with 'id'=666 

пост => нольПрисвоить значение, если RecordNotFound

post = "Banana" 
post = Post.find 666 
ActiveRecord::RecordNotFound: Couldn't find Post with 'id'=666 

пост => «банан»

Я хочу, чтобы убедиться, что post является nil, если находка не возвращает ничего. Есть ли элегантный способ присвоить ноль, если он приходит с пустыми руками?

+0

Как сообщение может быть «бананом»? –

+0

Я установил post = "Banana" на строку # 1 второго кодового блока. – Ashbury

ответ

4

Вот как это сделать:

post = Post.find_by(id: 666) 
+0

Да, это возвращает первое сообщение, если параметры равны нулю. – Ashbury

+1

«Я хочу удостовериться, что сообщение ничтожно, если находка ничего не возвращает». Именно это и происходит. Если нет сообщения с номером 666, сообщение равно нулю. –

+0

@ Ашбери - Не уверен, какие параметры имеют отношение к вопросу. Если вы выполняете 'find_by (id: params [: id])', и нет: id param, то post будет nil. –

1

Если вы настаиваете на использовании find, вам необходимо rescue в ActiveRecord::RecordNotFound исключение. Однако это очень медленно, и вряд ли Rails является идиоматическим, поэтому я предлагаю вам использовать find_by, как это было предложено в ответе выше.

begin 
    post = Post.find(666) 
rescue ActiveRecord::RecordNotFound 
    post = "Banana" 
end 
Смежные вопросы