开发者

Need help finding the first created record of each group, in Rails ActiveRecord

I have a table called FeedItems, and basically the user needs to see the first created feed item for each post id.

At the moment I'm using 'group', and SQLite is giving me the last created, for some reason. I've tried to sort the list of feed items before grouping, but it makes no difference.

user_id   |    post_id    |    action
----------------------------------------
    1             1           'posted'
    3             2           'loved'    <--- this, being created afterwards
                                               should not appear in the query.

I know thi开发者_如何学Cs has to do with an INNER JOIN, and I have seen some similar examples of this being done, however the difference is that I'm not sure how to do this AND use the existing query I already have to find out if the users are friends with the current user.

Here's the code for the model:

class FeedItem < ActiveRecord::Base
belongs_to :post
belongs_to :user

default_scope :order => 'created_at desc'
scope :feed_for, lambda { |user| feed_items_for(user).group(:post_id) }

private

def self.feed_items_for(user)
  friend_ids = %(SELECT friend_id FROM friendships WHERE (user_id = :user_id OR friend_id = :user_id))
  ghosted_ids = %(SELECT pending_friend_id FROM friend_requests WHERE user_id = :user_id)
  where("user_id IN (#{friend_ids}) OR user_id IN (#{ghosted_ids}) OR user_id = :user_id", {:user_id => user.id})
end

end

Any help would be greatly appreciated, thanks.


ActiveRecord provides you with dynamic attribute-based finders, which means that you have

Feeds.find_last_by_post_id(117)

If you would prefer to have the fist, you have:

Feeds.where(:post_id => 117).first

And you can always do, which I'm not sure is a "best practice":

Feeds.where(:post_id => 117).order('created_on DESC').first

You can read more about it at:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜