Reputation: 1934
I am having a mass assignment error. And I don't see why it give me the error Here the error
ActiveModel::MassAssignmentSecurity::Error in CustomersController#edit
Can't mass-assign protected attributes: gender
Here my models
Customer GenderManager Gender
ID Id Id
First isVisible Description
Last GroupID
Email
...
Here my relationship
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
<%= 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 %>
Upvotes: 1
Views: 90
Reputation: 955
You may need to use the build_gender
method to build the association.
gender_manager = @customer.gender_managers.build
gender_manager.build_gender
This answer has been edited to reflect the corrected code given in the accepted answer.
Upvotes: 1
Reputation: 21884
Have you tried just addind :gender
to the list of attr_accessible
in the GenderManager
model ?
But I find the answer above better, with a small correction:
gender_manager = @customer.gender_managers.build
gender_manager.build_gender
Upvotes: 1