1

我在Rails 3中有一個嵌套形式,如下所示,在創建過程中工作正常。在編輯階段,我得到警告:無法批量分配受保護的屬性:類型。表單不應該試圖設置「類型」,而且根據參數我可以看出,它並沒有這樣做。獲取未設置字段的質量分配錯誤

class TagSetNomination < ActiveRecord::Base 
    belongs_to :pseud 
    belongs_to :owned_tag_set 

    has_many :fandom_nominations, :dependent => :destroy 
    has_many :character_nominations, :dependent => :destroy 
    has_many :relationship_nominations, :dependent => :destroy 
    has_many :freeform_nominations, :dependent => :destroy 

    accepts_nested_attributes_for :fandom_nominations, :character_nominations, :relationship_nominations, :freeform_nominations, { 
    :allow_destroy => true, 
    :reject_if => proc { |attrs| attrs[:tagname].blank? } 
    } 
.... 
end 

所有這些提名類都是這個基類的子類:

class TagNomination < ActiveRecord::Base 
    belongs_to :tag_set_nomination 

    .... 
end 

這是我的表格的相關位:

<%= error_messages_for :tag_set_nomination %> 

<%= form_for(@tag_set_nomination, :url => (@tag_set_nomination.new_record? ? tag_set_nominations_path(@tag_set) : tag_set_nomination_path(@tag_set, @tag_set_nomination)), :html => {:method => (@tag_set_nomination.new_record? ? :post : :put)}) do |f| %> 

    <h4><%= ts("Tag Nominations") %></h4> 
    <fieldset class="tagset"> 
    <dl> 
     <% @tag_set_nomination.character_nominations.each_with_index do |character_nomination, index| %> 
     <%= f.fields_for :character_nominations, character_nomination do |nom_form| %> 
      <%= render 'tag_nominations', :nom_form => nom_form, :tag_type => 'character', :tag_nominations_counter => index %> 
     <% end %> 
     <% end %> 
    </dl> 
    </fieldset> 

.... 
<% end %> 

而且從日誌一些希望相關位:

Started POST "/tag_sets/1/nominations/3" for 68.175.83.208 at 2011-08-23 02:59:08 +0000 
Parameters: { ... "tag_set_nomination"=>{"character_nominations_attributes"=>{"0"=>{"tagname"=>"Sam", "parent_tagname"=>"", "tagnotes"=>"", "id"=>"12"}, "1"=>{"tagname"=>"Dean", "parent_tagname"=>"", "tagnotes"=>"", "id"=>"13"}, "2"=>{"tagname"=>"Yarbld", "parent_tagname"=>"Supernatural", "tagnotes"=>"some notes", "id"=>"16"}} ... } 

SQL (0.1ms) SELECT COUNT(*) FROM `tag_nominations` WHERE `tag_nominations`.`type` = 'CharacterNomination' AND (`tag_nominations`.tag_set_nomination_id = 3) 
... 
SQL (0.2ms) ROLLBACK 
Pseud Load (0.2ms) SELECT `pseuds`.* FROM `pseuds` WHERE (`pseuds`.user_id = 8) 
CharacterNomination Load (0.3ms) SELECT `tag_nominations`.* FROM `tag_nominations` WHERE `tag_nominations`.`type` = 'CharacterNomination' AND (`tag_nominations`.tag_set_nomination_id = 3) 
WARNING: Can't mass-assign protected attributes: type 
WARNING: Can't mass-assign protected attributes: type 
WARNING: Can't mass-assign protected attributes: type 

然後我被轉回編輯頁面中沒有錯誤。 D:

歡迎任何想法!我很困惑。

回答

1

好吧,我明白了,嘆了口氣。它與我粘貼的任何代碼無關。我有一個before_save回調函數,它將值設置爲true或false - 當然,當它返回false時,before_save回調函數會死掉,因此保存會回滾。

捂臉

1
+0

感謝Rushabh,但我真的不希望通過形式設置型 - 用於Rails的STI,在這種情況下,應自動處理。正如你在參數中看到的那樣,type實際上並沒有被設置。 – shalott

+0

O nice .Apologies,因爲我不明白你的問題! –