Rails 3范围查询

时间:2013-03-25 06:31:23

标签: ruby ruby-on-rails-3.2

我有一个名为“SessRequest”的模型,其中包含字段“sess_start”(会话的开始日期时间)和“sess_duration”(以小时为单位的会话持续时间)。因此,会话的结束时间是:sess_start + sess_duration.hours 我需要过滤掉“end_time”落后于当前时间的所有会话。 为此,相应的模型范围如下所示:

SESSION_ASSUMED_PAST_AFTER_HRS = 3
  scope :past,
    lambda{where('(sess_start < :current_time) AND (sess_start IS NOT NULL)', :current_time => 0.days.from_now - SESSION_ASSUMED_PAST_AFTER_HRS.hours)};

我想基于“sess_duration”数据库字段而不是常量SESSION_ASSUMED_PAST_AFTER_HRS来创建此范围。 如何在保持数据库不可知的同时完成这项工作?

1 个答案:

答案 0 :(得分:1)

您可以使用squeel gem来创建复杂的SQL查询和各种RDBMS系统。

您的代码如下:

SESSION_ASSUMED_PAST_AFTER_HRS = 3
scope :past, where { (sess_start < SESSION_ASSUMED_PAST_AFTER_HRS.hours.ago) & (sess_start != nil ) }