如何根据Rail关联防止每个循环的重复

时间:2015-05-05 16:37:53

标签: ruby-on-rails ruby

我一直在使用Rails一段时间,但我对Ruby的可能性不太熟悉并且正在撞墙。我有一个Books控制器和Recommendations控制器,还有一本书有很多建议。我想创建一个推荐列表,但不重复一本书。

这基本上就是我所拥有的 -

#Recommendations controller, index
@recommendations = Recommendation.all

#Recommendation view, index
@recommendations.each do |r|
  r.text
  r.book.cover_image
end

我尝试通过Books并基本上在所有书籍上运行每个循环,但后来我必须基本上做@ book.recommendation.first - 这意味着我不会看到所有的建议。

还有其他方法可以做到这一点,我没有想到吗?非常感谢!

2 个答案:

答案 0 :(得分:2)

我假设您要执行以下操作:

  • 对于每本至少有一个推荐的书
    • 列出该书及其建议

有几种方法可以做到这一点。例如

#controller
@grouped_recommendations = Recommendation.include(:book).all.group_by(&:book)

#view
 @grouped_recommendations.each do |book, recommendations|
   book.cover_image
   recommendations.each do |recommendation|
     recommendation.text
   end
 end

请注意,我错过了您当然需要包含的任何格式,我只是复制了您问题的样式。

答案 1 :(得分:1)

在控制器内部,你可以这样做:

@recommendations = Recommendation.includes(:book).all

稍后,在您的视图中,当您执行r.book时,它将不会再次查询数据库。