优化rails查询和关联

zev*_*iev 1 performance ruby-on-rails associations memory-efficient

我的申请中有以下关联:

# 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
Run Code Online (Sandbox Code Playgroud)

当我尝试访问用户喜欢的所有帖子时,我正在使用以下循环

@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
Run Code Online (Sandbox Code Playgroud)

但这似乎效率很低.

使用不同的关联或不同的循环方式,改善代码的最佳方法是什么?

qer*_*rub 5

添加has_many :liked_posts, :through => :likes, :class_name => 'Post'User然后调用 User.find(params[:id]).liked_posts.