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
Разве это не легче читать?