Ruby неопределенные переменные в представлениях - PullRequest
0 голосов
/ 23 июля 2010

У меня есть вид, который выглядит так:

<p><%= stage.end_date.strftime("%A, %d %B %Y")%></p>

Иногда stage.end_date возвращает null, и это нормально, но Ruby выдает ошибку NoMethodError.

Я новичок в Ruby, поэтому я хочу знать, как мне поступить с отсутствующими / нулевыми переменными в представлениях

  • Нужно ли проверять stage.end_date в представлении? потому что это выглядит ужасно
  • Мне нужно убедиться, что stage.end_date не равно нулю, если так это не работа на мой взгляд, не так ли?
  • Есть ли способ получить рубин не беспокоиться о stage.end_date и не ошибся?

Советы приветствуются

Ответы [ 3 ]

7 голосов
/ 23 июля 2010

Просто используйте метод Rails, попробуйте.По сути, сделайте это:

stage.end_date.try(:strftime,"%A, %d %B %Y")

Когда end_date равен nil, попытка не вызовет метод, а просто вернет nil.

5 голосов
/ 23 июля 2010

Вы можете сделать это несколькими способами, но есть два:

<p><%= stage.end_date.strftime("%A, %d %B %Y") unless stage.end_date.nil? %></p>

или в вашей сценической модели создайте:

def end_date_formatted
  return "" if end_date.nil?
  end_date.strftime("%A, %d %B %Y")
end
1 голос
/ 23 июля 2010

Проблема в вызове strftime для объекта nil.Вот пример irb:

>> t = Time.now
=> Thu Jul 22 16:52:10 -0400 2010
>> x = nil
=> nil
>> puts t.strftime("%A, %d %B %Y")
Thursday, 22 July 2010
=> nil
>> puts x.strftime("%A, %d %B %Y")
NoMethodError: undefined method `strftime' for nil:NilClass
    from (irb):4

Когда вы вызываете метод (например, strftime) для объекта, который может быть nil, вы получите эту ошибку.Для этих случаев вы можете попробовать следующее:

<p><%= stage.end_date.strftime("%A, %d %B %Y") unless stage.end_date.nil? %></p>

, если это не сработает, замените .nil? на .blank?

Надеюсь, что это поможет.

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