2013-07-03 82 views
1

我有2種型號,用戶友誼,這裏就是他們的樣子:如何打印我的朋友的帖子和帖子?

class User < ActiveRecord::Base 
    has_many :posts 
    has_many :friendships, :conditions => { :confirmed => true } 
    has_many :friend_requests, :class_name => 'Friendship', :conditions => { :confirmed => false } 
    has_many :friends, :through => :friendships 
    has_many :friends_friendships, :through => :friends, :source => :friendships 
    has_many :friends_of_friends, :through => :friends_friendships, :source => :friend 
    has_many :friends_listings, :through => :friends, :source => :listings 
    has_many :friends_posts, :through => :friends, :source => :posts 
    ... 
end 

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
    attr_accessible :friend_id 
    ... 
end 

,這裏是我如何獲取的當前用戶的帖子記錄帖子他/她的朋友:

@my_posts = current_user.posts.includes(:user) 
    @friends_posts = current_user.friends_posts.includes(:user) 

這很好,但我怎樣才能將我的帖子+朋友的帖子加載到一個變量中並將它們顯示爲在Facebook上?換句話說,我怎樣才能將這兩個查詢合併爲一個?

感謝

+0

我寫了一個SQL來實現這一目標。 –

回答

3

是這樣的:

ids = current_user.friends.pluck(:id) << current_user.id 
posts = Post.where(user_id: ids) 

回報

SELECT `posts`.* FROM `posts` WHERE `posts`.`user_id` IN (1, 2, 3, 6) 

然後在視圖:

posts.each do |post| 
    .... 
end 
+0

你好,謝謝你的努力,我正在嘗試這個,但無法克服這個錯誤信息:'SQLite3 :: SQLException:模棱兩可的列名:id:SELECT id FROM「users」INNER JOIN「friendships」ON「users」 id「=」友誼「。」friend_id「在哪裏」友誼「。」user_id「= 2和」友誼「。」證實「='t'' - 怎麼了? – user984621

+0

'current_user.friends'返回一個用戶當前的朋友數組,對嗎?它應該是因爲你有'用戶有很多朋友'的關係。 – rmagnum2002

+0

你可以這樣試試'ids = current_user.friends.map {| f | f.id} << current_user.id',它會返回一個包含你自己的id數組,看它是否有效。可能是採摘方法不適合你。 – rmagnum2002

相關問題