我有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
无法通过附件访问,只能合同(复数),但我想避免第二次循环。那我怎么能这样做呢?
答案 0 :(得分:1)
访问
contract
无法通过附件
这是混乱的一点,因为
<%= a.contract.id %>
不清楚你要做什么。并不是contract
无法通过Accessory
访问;它Accessory
没有contract
关联。
假设您希望每个contract
的第一个Accessory
,您可以在查询上使用.include
强制联接回contracts
表,避免了n + 1查询问题
<% @client.accessories.includes(:contracts).each do |a| %>
<%= a.name %>
<%= a.contracts.first.id %>
<% end %>