Я написал метод экземпляра в моей модели для расчета разницы во времени между двумя датами. Работает, когда существует вторая дата, но нужно добавить условие 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 %>