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, я не могу поверить, что другой ответ выиграл. –