0

我有 3 个模型:

#Client.rb
has_many :contracts
has_many :accessories,  :through => :contracts

#Contract.rb
has_and_belongs_to_many :accessories
belongs_to :client

#Accessory.rb
has_and_belongs_to_many :contracts
belongs_to :pay_interval
has_many :clients, :through => :contracts

在我的客户的show.html.erb查看页面上,我想列出所有客户的配件,以及配件所属的合同 ID。例如:

<% @client.accessories.each do |a| %>
  <%= a.name %>
  <%= a.contract.id %>
<% end %>

但是,contract不能通过附件访问,只能访问合同(复数),但我想避免第二个循环。那么我该怎么做呢?

4

1 回答 1

1

contract无法通过附件访问

这是混淆点,因为

<%= a.contract.id %>

使您不清楚您要做什么。不是contract不能通过Accessory; 它Accessory 没有contract关联


假设您想要each的第contractAccessory一个,您可以.include在查询上使用强制连接您的contracts表,避免 n+1 查询问题

<% @client.accessories.includes(:contracts).each do |a| %>
  <%= a.name %>
  <%= a.contracts.first.id %>
<% end %>
于 2012-08-25T23:43:41.227 回答