2009-09-29 16 views
0

我建立一個形式爲:has_many :through關係:NoMethodError與collection_select

class Account < ActiveRecord::Base 
    has_many :employments 
    has_many :people, :through => :employments 
    accepts_nested_attributes_for :employments 
end 

class Person < ActiveRecord::Base 
    has_many :employments 
    has_many :accounts, :through => :employments 
end 

class Employment < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :person 
end 

Employment模型包含字段:account_id:person_id

在帳戶形式,我加入:

<% fields_for 'account[employments_attributes][]', @account.employments do |e| %> 
    <%= e.hidden_field :account_id, :value => @account.id %> 
    <%= e.collection_select :person_id, Person.all, :id, :name %> 
<% end %> 

collection_select,或select爲好,以任何排列我給他們失敗了NoMethodError例外:

undefined method `person_id' for #<Array:0x82e7db0> 

這是因爲如果person_id字段不存在,但我可以用:account_id:person_id完美地調用創建方法。

回答

2

回答我自己的問題。當我在訓練大腦思考Rails的方式時,我一直在遇到類似這樣的情況,我只是在思考錯誤的問題。

forms_for需要對來自控制器的已經實例化的對象起作用。而不是這種形式創建就業對象,它填寫在一個空的領域。所以,我需要在edit行動,創建一個空的就業目標:

@account.employments.build 

封裝用正確的邏輯,所以,當我需要它只能被創建。