cupcakekid
cupcakekid

Reputation: 233

How to specify a record with a date greater than another date?

I have a record called Feeds that contains the field 'last_visited' and 'last_modified', both are timestamps.

I'm trying to render a list in a view of alls Feeds where last_modified > last_visited.

I currently have this:

Controller

@feeds = @user.feeds

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

Have a feeling I'm way off track here. Should I also being using a model class to do this?

Any helps is greatly appreciated.

Edit:

Here's my model

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

Edit

Updated code

Controller

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

Model

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')}

View

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

Unfortunately it's still not rendering the hot feeds in the view when I have a feed with the following data:

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

Last Modified is a few hours > than Last Visited

Upvotes: 2

Views: 480

Answers (1)

zeantsoi
zeantsoi

Reputation: 26203

If you're looking to get a list of all feeds that have been modified more recently than the most recent visit on any feed, the following will work:

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

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

EDIT:

Based on your comments and a re-reading of your question, the code posted above will not accomplish what you're trying to do. Since you're trying to get a list of all invites where each has been modified since it was last visited, you'll want to create a model scope to do the lookup with ActiveRecord. The following code should work:

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

Then, you can run the following in a console, controller, or view:

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

Upvotes: 3

Related Questions