Rails范围与DateTime

时间:2015-11-21 10:04:16

标签: ruby-on-rails datetime scope

我正在尝试创建一组结果以显示在“摘要”页面上,但在调用范围内的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

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

在您的代码cover?中,方法是指给定范围,而不是查询。你应该尝试这样的事情:

scope :can_be_shown_now,  -> { poster_for_summary.where(["`posters`.start_time <= ? AND `posters`.end_time >= ?", t = DateTime.now, t]) }