创建范围以比较2个日期

时间:2013-06-15 01:11:31

标签: ruby-on-rails ruby ruby-on-rails-3 rails-postgresql

我有一个名为Feed的模型,它记录了两个时间戳,Last_visited和Last_modified。

我想渲染一个last_modified>的Feed列表last_visited

我目前在我的模型中有这个范围:

scope :hottest, lambda {where("'last_modified' > ?", 'last_visited')}

控制器

def home
  @user = current_user
  @feeds = @user.feeds
end

我正在视图中渲染链接:

%ol
  - @feeds.hottest.each do |feed|
    %li
      = render :partial => 'feeds/feed_link'

这是我的服务器日志呈现的内容(我正在使用Postgres):

Feed Load (0.4ms)  SELECT "feeds".* FROM "feeds" WHERE "feeds"."user_id" = 1 AND ('last_modified' > 'last_visited')

我在数据库中有一个条目,其中last_modified> last_visited,但它没有按预期呈现在我的视图中:

Foofeed
Last Modified 2013-06-15 01:08:27 UTC
Last Visited 2013-06-15 01:05:32 UTC

我有点不解为什么这不起作用。

非常感谢任何见解或替代方法。

2 个答案:

答案 0 :(得分:0)

试试这个scope :hottest, lambda {where("'last_modified' > ?", last_visited)}

答案 1 :(得分:0)

只是做:

scope :hottest, lambda {where("last_modified > last_visited")}

以下是我的模型User的示例:

scope :updated, lambda { where("updated_at > created_at").limit(1) }
scope :not_updated, lambda { where("updated_at = created_at").limit(1) }

在控制台中:

1.9.3p194 :004 > User.updated
  User Load (1.4ms)  SELECT "users".* FROM "users" WHERE (updated_at > created_at) LIMIT 1
 => [#<User id: 7, first_name: "Test1", last_name: "Test1", created_at: "2013-05-21 21:29:54", updated_at: "2013-06-15 00:09:12">]
1.9.3p194 :005 > User.not_updated
  User Load (1.3ms)  SELECT "users".* FROM "users" WHERE (updated_at = created_at) LIMIT 1
 => [#<User id: 14, first_name: "Test2", last_name: "Test2", created_at: "2013-05-22 20:07:27", updated_at: "2013-05-22 20:07:27">]