Rails - 访问HABTM中间人的关系数据

时间:2012-08-25 22:49:32

标签: ruby-on-rails ruby-on-rails-3 model

我有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无法通过附件访问,只能合同(复数),但我想避免第二次循环。那我怎么能这样做呢?

1 个答案:

答案 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 %>