Nested Attributes in Rails 3

Hello All,

I am stuck in nested attributes:-

here is my code :-

User.rb :-

has_one :address

accepts_nested_attributes_for :address

Address.rb :-

belongs_to :user

_form.html.erb:-

<%= simple_form_for @user ,:validate => true do |f| %>

<%= f.fields_for :address do |d| %>

          <%= d.input :first_name %>

          <%= d.input :last_name %>

<% end %>

<%= f.input :email %>

<% end %>

in user_controller.rb:-

In new as well as create method I tried with:-

@user = User.new

@user.build_profile

But still I am getting the error as :-

Can't mass-assign protected attributes: address_attributes
Any Suggestions ??
Thanks....

add

attr_accessible :address_attributes

in your model.

Only the fields that you specify via attr_accessible, are open to mass assignment.

Unni

I didn’t get this :-

attr_accessible :address_attributes

Why we need to define this in user.rb?

We already have has_one relation. Will it not be accessing those attributes in address model automatically?

I didn't get this :- *attr_accessible :address_attributes* * * Why we need to define this in user.rb? We already have has_one relation. Will it not be accessing those attributes in address model automatically?

fields_for uses <association>_attributes as the name of the fields when you are using accepts_nested_attributes_for :association so you need to define this in attr_accessible

http://stackoverflow.com/a/3283404/1731232

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible

http://currentricity.wordpress.com/2011/09/04/the-definitive-guide-to-accepts_nested_attributes_for-a-model-in-rails-3/

I tried with that. But somewhere validations are failing. I had dropped my db. Trying to create a user. But in console it says:

User already exists.

Not sure.

In controller I have mentioned as @user.build_profile. Is it fine?

& in erb file, I am using simple_form_for.

So can we use fields_for there?

@user = User.new

@user.build_profile

Is that all what you have in the controller in create action?

**@user = User.new(params[:user]) **

is what one would expect.

In new :-

@user = User.new

@user.build_address # here is it required while building the page ?

create :-

@user = User.new(params[:user])

@user.save

If I use build here, I am not getting those attributes present in address model in UI.

Sorry I have communicated wrong. This is the controller

Its working now. Its my fault.

I forgot to remove an attribute’s validation which I moved from User model to Address model. There validation was failing.

Thanks for helping me out…

Cheers !

hi… im going to start learning ruby…now dont know even a single thing about ruby,can anyone please suggest how to start learning…?

thank you…

jinet

What has that got to do with the subject line (Nested Attributes in Rails 3) and why have you posted a large message with many irrelevant quoted lines?

You say you want to learn to use Ruby, but this is a Ruby on Rails list so I assume you want to learn Ruby on Rails. The answer is to start by working through a good rails tutorial such as railstutorial.org (which is free to use online). I assume you already know the basics of html, if not then start there. Also work on your google skills, I am sure that a search for learning ruby rails would have given you many useful answers.

If you want to ask more then please start a new thread with an appropriate subject line.

Colin