我正在尝试创建一组结果以显示在“摘要”页面上,但在调用范围内的DateTime时遇到问题:can_be_shown_now
当我更改数据库中的日期时,我的海报仍然会在不应该出现时显示。
模型
class Poster < ActiveRecord::Base
scope :poster_for_summary, -> { self.where(show_on_summary_page: true) }
scope :can_be_shown_now, -> { poster_for_summary.where((:start_time..:end_time).cover?(DateTime.now)) }
scope :choose_for_summary, -> { can_be_shown_now.order("RANDOM()").first }
end
应用程序控制器
def fallback_poster
@fallback_poster = Poster.choose_for_summary if controller_name == 'summary'
end
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
在您的代码cover?
中,方法是指给定范围,而不是查询。你应该尝试这样的事情:
scope :can_be_shown_now, -> { poster_for_summary.where(["`posters`.start_time <= ? AND `posters`.end_time >= ?", t = DateTime.now, t]) }