Проблема сравнения времени с Rails - PullRequest
1 голос
/ 24 февраля 2009

У меня очень простая задача. Если время последнего обновления записи превышало 15 минут, отобразите кнопку. В противном случае не отображать кнопку.

Поле является датой и временем.

Код моего просмотра:

<% if @object.display_button? -%>
  my button
<% end -%>

Мой метод отображения кнопки на этом объекте:

def display_button?
  return false if last_updated.nil?
  if Time.now - last_updated > 15.minutes
    true
  else
    false
  end
end

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

Правильна ли моя логика или будет ли лучший способ сделать это?

1 Ответ

7 голосов
/ 24 февраля 2009
if last_updated < 15.minutes.ago

Метод минут возвращает целое число, которое я считаю, а вычитание объекта времени дает другой объект времени. Таким образом, ваше выражение сравнивает int со временем и делает то, чего вы не ожидаете.

15.minutes.ago возвращает объект времени, который можно напрямую сравнить с другим объектом времени.


Кроме того, никогда не делайте if (something) return true; else; return false в рубине. Ваш метод вернет значение последнего выполненного в нем выражения, поэтому вы можете значительно упростить весь этот метод:

def display_button?
  last_updated && last_updated < 15.minutes.ago
end

Разве это не легче читать?

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