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

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”数据库字段,而不是假设的持续会话在小时后超过。
在保持数据库不可知的情况下,如何做到这一点?

最佳答案

您可以使用squeelgem创建复杂的SQL查询和各种RDBMS系统。
您的代码将如下所示:

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

关于ruby - Rails 3范围查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15608947/

10-13 07:19