需要帮助在Rails ActiveRecord中查找每个组的第一个创建记录

时间:2011-07-07 13:43:52

标签: sql ruby ruby-on-rails-3 sqlite activerecord

我有一个名为FeedItems的表,基本上用户需要查看每个帖子ID的第一个创建的订阅源项。

目前我正在使用'group',而SQLite正在给我最后一次创建,出于某种原因。我曾尝试在分组之前对Feed项目列表进行排序,但这没有任何区别。

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

我知道这与INNER JOIN有关,我已经看到了一些相似的例子,但不同之处在于我不知道如何做到这一点并使用我已经找到的现有查询如果用户是当前用户的朋友,则输出。

以下是模型的代码:

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

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

ActiveRecord为您提供基于动态属性的查找程序,这意味着您有

Feeds.find_last_by_post_id(117)

如果你更愿意握拳,你有:

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

你可以随时做,我不确定是“最佳做法”:

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

您可以在以下网址了解更多信息:

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