我一直在使用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 - 这意味着我不会看到所有的建议。
还有其他方法可以做到这一点,我没有想到吗?非常感谢!
答案 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
时,它将不会再次查询数据库。