Muflix
Muflix

Reputation: 6778

Rails 3 my first nested form doesnt work - Can't mass-assign protected attributes

I'm creating my first nested form in Rails 3.2.13. User is registering and he fill email, password and address information and company information.. but the error is showing while user click on submit. Error is at the bottom.

Im not sure about this line: attr_accessible :address_attributes, :company_attributes which i read it could help but it doesnt and i have addresses in the view but address in the model because of one-to-one relationship but if i have <%= f.fields_for :**address** do |builder| %> the form doesnt show up. Please what i have to do ? :-) The post sends then

"companies"=>{"name"=>"Companyname"

User model

class User < ActiveRecord::Base
  attr_accessible ...

    has_many :orders
    belongs_to :address
    belongs_to :company

    accepts_nested_attributes_for :address, :company
    attr_accessible :address_attributes, :company_attributes

Company model

class Company < ActiveRecord::Base
  attr_accessible ...
    has_many :users
    validates_presence_of ...
end

Address model

class Address < ActiveRecord::Base
  attr_accessible ...
    has_many :orders, :foreign_key => 'payment_address_id'
    has_many :orders, :foreign_key => 'delivery_address_id'
    has_many :users

    validates_presence_of ...

end

new.html.erb (creating new user)

<%= form_for @user do |f| %>
  ...

  <%= f.fields_for :addresses do |builder| %>
   ...
  <% end %> 

  <%= f.fields_for :companies do |builder| %>
   ...
  <% end %> 

  <%= f.submit %>
<% end %>

error while i click on submit

Can't mass-assign protected attributes: addresses, companies

EDIT:

First mistake: i changed in Class User

belongs_to :address
belongs_to :company
on
has_one :address
has_one :company

and in Address and Company model i edit

has_many :users
on
belongs_to :user

but nested forms doesnt show up in the view.. i tried edit Users Controller by adding .build method

 def new
   @user = User.new
   @user.company.build
   @user.address.build
 end

but im getting new error

undefined method `build' for nil:NilClass

please what i have to do now ?

Upvotes: 0

Views: 207

Answers (1)

rmagnum2002
rmagnum2002

Reputation: 11421

I had a case like this a day ago, and that's what I used.

class User
  attr_accessible :name, :email, :company_attributes, :address_attributes
  has_one :company
  accepts_nested_attributes_for :company
end

and EmailSetting:

class Company
  belongs_to :user
end

after this I can run in console:

User.new.build_company

as for form:

<%= form_for @user do |f| %>
  <%= f.fields_for :company do |builder| %>
    <%= f.text_field :name %>
  <% end %>
<% end %>

in controller you just initialize the @user variable, no need to do @user.company.build or @user.address.build

Upvotes: 1

Related Questions