是否建议使用一般模式来构建“摘要详细信息”类型视图?例如,您有一个带有报告视图的发票应用程序,需要为每个客户列出标题,并在标题下列出该客户的每个未结发票的详细信息。
以下是我过去尝试处理它的方式(使用客户/发票示例),其中没有一个非常令人满意:
方法#1 :
创建一个连接查询,将客户详细信息与发票相关联。在集合中的视图循环中,使用实例变量来跟踪正在循环的客户。在循环代码中有一个条件,将当前迭代的客户与最后一个interation的客户进行比较。如果它们不同,请为新客户添加标题。
方法#2 :
查询具有未结发票的客户,然后在视图中迭代客户并嵌套客户迭代,对该客户的未结发票进行另一次迭代,例如:
<% @customers.each do |customer| %>
<%= customer.name %>
<% customer.invoices.open.each do |invoice| %>
<%= invoice.details %>
<% end %>
<% end %>
所以,是的。这些都不是很好。方法#1看起来像是一个黑客,方法#2似乎会产生太多的查询,尽管它在代码中最易读。
答案 0 :(得分:0)
看起来像使用ActiveRecord的经典案例包括选项
http://apidock.com/rails/ActiveRecord/QueryMethods/includes
所以在您的控制器中找到客户
Customer.includes(:invoices).where('customer.name = ?', 'example')