2012-08-10 80 views
1

我有一個質量分配錯誤。我不明白爲什麼它給我的錯誤 在這裏的錯誤Rails Association中的棘手錶格

ActiveModel::MassAssignmentSecurity::Error in CustomersController#edit 

Can't mass-assign protected attributes: gender 

這裏我的模型

Customer  GenderManager  Gender 
ID   Id     Id 
First  isVisible   Description 
Last   GroupID 
Email 
... 

這裏我的關係

class Customer < ActiveRecord::Base 
# RELATIONSHIP 
    #Gender 
    has_many :gender_managers 
    accepts_nested_attributes_for :gender_managers, allow_destroy: :true 
end 
class GenderManager < ActiveRecord::Base 
# RELATIONSHIP 
    belongs_to :customer 
    has_one :gender 
    attr_accessible :customer_id, :friendship_group_id, :isUsed, 
    :isVisible, :genders_attributes 
    accepts_nested_attributes_for :gender, allow_destroy: :true 
end 
class Gender < ActiveRecord::Base 
    belongs_to :gender_manager 
    attr_accessible :description, :gender_managers_id 
end 

CustomerController

def edit 
     @customer = Customer.find(params[:id]) 
     @customer.gender_managers.build(:gender => Gender.new) 

     @bm = current_customer.book_managers.build 
end 

形式

<%= form_for @customer, :html => {:multipart => true} do |f| %> 
    <div class="customer_edit_error_message"> 
      <%= render 'shared/error_messages' %> 
    </div> 
    <fieldset> 
    <div class="customer_edit_name"> 
      <%= f.label :first_name %> 
      <%= f.text_field :first_name %> 
    </div> 

    <div class="customer_edit_middle_name"> 
      <%= f.label :middle_name %> 
      <%= f.text_field :middle_name %> 
    </div> 

    <div class="customer_edit_last_name"> 
      <%= f.label :last_name %> 
      <%= f.text_field :last_name %> 
    </div> 
    <%= f.fields_for :gender_managers do |gendermanagers| %> 
    <fieldset> 
     <%= gendermanagers.fields_for :genders do |genders| %> 
      <%= genders.label :description %> 
      <%= genders.select :description %> 
     <% end %> 
     <div><%= gendermanagers.label :friendship_group_id, "Show To: " %> 
     <%= gendermanagers.text_field :friendship_group_id %></div> 
     <div><%= gendermanagers.check_box :isVisible %> 
     <%= gendermanagers.label :isVisible %></div> 
    </fieldset> 
    <% end %> 
    <div class="customer_edit_button"> 
      <%= f.submit "Save changes", class: "button_accept" %> 
    </div> 
    <% end %> 
+0

你幾乎可以肯定失蹤ATTR-入店,你需要包括的東西。我不確定是什麼。 – 2012-08-10 15:54:33

+0

性別有gender_managers_id會是我的問題嗎? – Jseb 2012-08-10 15:59:52

回答

1

您是否試過將addind :gender添加到GenderManager模型中的attr_accessible列表中?

但我發現上面更好的答案,用小修正:

gender_manager = @customer.gender_managers.build 
gender_manager.build_gender 
+0

Gender_manager會在我的控制器中表示嗎?原因:性別有效,但我不明白爲什麼會這樣? – Jseb 2012-08-10 16:07:09

+0

似乎要做的伎倆,只是不能創建對象 – Jseb 2012-08-10 16:09:57

1

您可能需要使用build_gender方法建立的關聯。

gender_manager = @customer.gender_managers.build 
gender_manager.build_gender 

此答案已被編輯以反映接受答案中給出的更正的代碼。