1
我有一個名爲FeedItems的表,基本上用戶需要查看每個帖子ID的第一個創建的feed項目。需要幫助找到每個組的第一個創建記錄,在Rails ActiveRecord
目前我正在使用'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
末
任何幫助將不勝感激,謝謝。
我沒有使用這種方法的原因是我需要第一個爲_each_ post_id創建的提要。換句話說,我需要它返回一個FeedItem的整個數組,每個post_id一個。 如果我使用這種方法,我必須創建一個for循環或其他東西,這將最終成爲一大堆查詢。我怎麼一次完成這一切? – rupertonline