2011-07-07 48 views
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 

任何幫助將不勝感激,謝謝。

回答

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

+0

我沒有使用這種方法的原因是我需要第一個爲_each_ post_id創建的提要。換句話說,我需要它返回一個FeedItem的整個數組,每個post_id一個。 如果我使用這種方法,我必須創建一個for循環或其他東西,這將最終成爲一大堆查詢。我怎麼一次完成這一切? – rupertonline

相關問題