2012-08-25 79 views
0

我有3種型號:導軌 - 進入HABTM中間人的關係數據

#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視圖頁上,我想列出所有客戶的配件,合同編號附件屬於。例如:

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

然而,contract無法通過附件進行訪問,只有合同(複數),但我想,以避免第二個循環。那我該怎麼做?

+0

你模型模式說'附件'屬於**許多**合同;它沒有單個':contract_id'。 – deefour

+0

我指出了這一點,因爲'a.contract.id'在附件的上下文中沒有意義,因爲根據您的模型關聯沒有單個'contract'。 – deefour

+0

是的,我明白這一點。我只是想知道是否有一種方法可以防止我想要做的循環內部有循環。 –

回答

1

contract無法通過附件

這是混亂的點進行訪問,因爲

<%= a.contract.id %> 

讓你試圖做什麼還不清楚。這不是contract不能通過Accessory訪問;其Accessory沒有contract協會


假設你想每個Accessory第一contract,則可以使用.include對查詢強制對你contracts表的連接回,避免了N + 1個查詢問題

<% @client.accessories.includes(:contracts).each do |a| %> 
    <%= a.name %> 
    <%= a.contracts.first.id %> 
<% end %>