如何指定日期大于另一个日期的记录?

时间:2013-06-14 17:08:42

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

我有一个名为Feeds的记录,其中包含字段'last_visited'和'last_modified',两者都是时间戳。

我正在尝试在所有Feed中查看列表,其中last_modified> last_visited。

我目前有这个:

控制器

@feeds = @user.feeds

@feeds_hot = @feeds.where(['@feeds.last_modified > ?', @feeds.last_visited])

感觉我在这里偏离轨道。我是否还应该使用模型类来执行此操作?

非常感谢任何帮助。

编辑:

这是我的模特

class Feed < ActiveRecord::Base
  attr_accessible :feed_id, :feed_url, :last_modified, :title, :url, :last_visited, :user_id

  belongs_to :user

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

  def fetch_feed!
   feed = Feedzirra::Feed.fetch_and_parse(feed_url) # probably want some eror handling here
   self.title = feed.title
   self.url = feed.url
   self.last_modified =  feed.last_modified
   self.last_visited  =  feed.last_modified
   self #or nil if you like
  end

  def self.check_for_update(feed)

    fetched_feed = Feedzirra::Feed.fetch_and_parse(feed.feed_url)

    entry = fetched_feed.entries.first
    feed.last_modified = entry.published

  end

 def update_visit_date!
  date = Time.now
  update_attribute(:last_visited, date)
  self
 end

end

修改

更新了代码

控制器

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

模型

attr_accessible :feed_id, :feed_url, :last_modified, :title, :url, :last_visited, :user_id

belongs_to :user

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

查看

%ol.feeds.feeds_hot
  - @feeds_hot.each do |feed|
    %li.feed.hot[feed]
      = render :partial => 'feeds/feed_link', :locals => {:feed => feed}

不幸的是,当我有一个包含以下数据的Feed时,它仍然没有在视图中呈现热门提要:

Last Modified 2013-06-14 23:49:07 UTC
Last Visited 2013-06-14 23:47:55 UTC

上次修改是几个小时&gt;比上次访问

1 个答案:

答案 0 :(得分:3)

如果您希望获得最近修改过的所有Feed的列表,而不是最近访问任何 Feed,则以下内容将有效:

last_visit = Feed.order("last_visited").last.last_visited

@feeds = @user.feeds
@hot_feeds = Feed.where("last_modified > ?", last_visited)

编辑:

根据您的评论和重新阅读您的问题,上面发布的代码无法完成您要执行的操作。由于您尝试获取自上次访问以来每个被修改的所有邀请的列表,因此您需要创建模型scope以使用ActiveRecord进行查找。以下代码应该有效:

# app/models/feed.rb
class Feed < ActiveRecord::Base
scope :hottest, lambda {where('last_modified > ?', :last_visited)}
end

然后,您可以在控制台,控制器或视图中运行以下命令:

@user.invites.hottest
#=> array of all the user's invites that have been modified more recently than they have been viewed