2012-09-11 44 views
1

奇怪!當我使用fields_for聲明一個嵌套的屬性字段,Rails添加與嵌套屬性的id的隱藏屬性(執行更新):Rails添加嵌套的屬性ID以形成導致質量分配的形式

= form_for @opinion do |f| 
    = f.fields_for :client do |client_f| 
     = client_f.text_field :name 

給我:

<input name="opinion[client_attributes][name]" type="text" /> 
<input name="opinion[client_attributes][id]" type="hidden" value="4" /> 

這導致:

Can't mass-assign protected attributes: client_attributes 

當然,這裏是我的模型:

class Opinion < ActiveRecord::Base 

    attr_accessible :content 
    attr_accessible :client_id 

    validates :content, :presence => true, :length => { :maximum => 2048 } 

    belongs_to :client 
    accepts_nested_attributes_for :client 

end 

class Client < ActiveRecord::Base 

    attr_accessible :name 

    validates :name, :presence => true, :length => { :maximum => 64 } 

    has_many :opinions 

end 

是否存在導軌視圖或模型問題?

任何想法如何解決這個問題?提前致謝。

回答

4

添加:client_attributes:attr_accessible

:attr_accessible被用來識別哪些字段打開質量分配。

在發送給控制器的請求中,應該有一個名爲client_attributes的參數鍵來對客戶端的詳細信息進行分組。你必須使這一項能夠進行批量分配,因此你可以通過批量分配的方式來更新客戶的細節。

+0

非常感謝。我認爲這是由'accept_nested_attributes'自動完成的。 – htaidirt

+0

它只是「添加」嵌套的屬性:) – code4j