Метод экземпляра Rails с if / else в пустом поле - PullRequest
0 голосов
/ 26 ноября 2011

Я написал метод экземпляра в моей модели для расчета разницы во времени между двумя датами. Работает, когда существует вторая дата, но нужно добавить условие if else для возврата строки, если вторая дата не существует. У меня

class Incident  
def calculate_elapsed(difference)
if self.closed.nil?
  @difference = "Open"
else
  d1 = self.created
  d2 = self.closed
  difference = d2 - d1
  @difference = difference.to_i
end 

Когда я пытаюсь загрузить Инцидент, который, как я знаю, имеет пустую closed дату, я получаю

You have a nil object when you didn't expect it!

You might have expected an instance of Array.

The error occurred while evaluating nil.-

озадачен ошибкой, потому что я понял if self.closed.nil? проверял нулевой объект. Что я могу сделать, чтобы заставить это работать?

Я не уверен, что это правильный способ справиться с тем, что я пытаюсь сделать, так что открывайте любые предложения (т. Е. Это должен быть метод класса, помощник и т. Д. Он уже был в моем контроллере и понял, что это был шаг в правильном направлении).

Что еще более запутанно, так это то, что я могу вызывать этот метод частично, и он возвращает строку «Открыть» везде, где закрытой даты не существует.

Редактировать

Вот что у меня получилось -

Модель:

class Incident  
def calculate_elapsed
if self.closed.blank?
  @difference = "Complaint Open"
else
  d1 = created
  d2 = closed
  difference = d2 - d1
  difference_clean = difference.to_i
  @difference = difference_clean.to_s + ' Days'
end 
end

show.html.erb

<%= @incident.calculate_elapsed %>

_incidents.html.erb частичный

<%= incident.calculate_elapsed %>

1 Ответ

1 голос
/ 26 ноября 2011

Ошибка должна быть где-то еще, потому что метод nil? определен для объектов, а nil также является объектом.

Как, вероятно, помог мой последний комментарий, возможно, определение вашего класса в вашей среде Rails былоустарел, поэтому перезапуск приложения заставил Rails перезагрузить исходный код.

Вы также можете перезагрузить классы с помощью метода reload!, например, в консоли Rails.

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