2012-01-30 48 views
1

我在我的應用程序中的以下關聯:優化軌查詢和協會

# user.rb 
has_many :posts, :dependent => :destroy 
has_many :likes, :dependent => :destroy 

# post.rb 
belongs_to :user 
has_many :likes, :dependent => :destroy 


# like.rb 
belongs_to :user 
belongs_to :post 

當我試圖訪問所有用戶喜歡我用下面的循環

@user = User.find(params[:id]) 
@posts_user_likes = [] 
@user.likes.each do |like| # TODO optimize 
    @posts_user_likes << Post.find_by_id(like.post_id) 
end 
職位

但這似乎效率很低。

改善我的代碼的最好方法是什麼,無論是使用不同的關聯還是不同的循環方式?

回答

5

has_many :liked_posts, :through => :likes, :class_name => 'Post'加到User然後打電話User.find(params[:id]).liked_posts

+1

omg,我不能相信贏得其他答案。 – 2012-01-31 00:09:43