Has_one relation and form_for

Hello everybody. I have two models user and user_information. the User
has_one user_information and the UserInformation belongs_to user. Now I
need to make a form_for to create the user information for an user. So I
go
to the following link:
http://localhost:3000/users/1/user_informations/new
a fill the form, with the user_id, and the other fields. But I get the
following error:

Can’t mass-assign protected attributes: user_id

I think the error is in the user_information#new view, in the form_form.
This is the actual form

<%= form_for(@user_information) do |f| %>

<%= f.text_field :user %>

<%= f.label :address %>
<%= f.text_field :address %>
<%= f.label :phone %>
<%= f.text_field :phone %>
<%= f.label :business %>
<%= f.check_box :business %>
<%= f.submit %>
<% end %>

I think the form_for should be something like <%=
form_for([@user_information, @user.user_information.bluild]) do |f| %>
but it doesn’t work. So I really really need your help, please.

Jean ha scritto:

Can’t mass-assign protected attributes: user_id

to solve this you need:

attr_accessible :user_id

in the UserInformation model, but you’re using nested resources, so I’d
prefer something like:

UserInformationController

def new
@user = User.find(params[:id])
@user_information = @user.user_information.build
end

def create
@user = User.find(params[:id])
@user_information = UserInformation.new(params[:user_information])
@user_information.user = @user
@user_information.save
end

take a look here:

Thanks Tomas. I tried this way, but then I get this error:

NoMethodError in UserInformationsController#new

undefined method `build’ for nil:NilClass

Jean ha scritto:

Thanks Tomas. I tried this way, but then I get this error:

NoMethodError in UserInformationsController#new

undefined method `build’ for nil:NilClass

yeah, sorry, for has_one relation the correct statement is:

def new
@user = User.find(params[:id])
@user_information = @user.build_user_information
end

Thanks Tommaso, It works, but the user_id has this User:0x007fe37d33b5e0
no
User:1, is that ok???

Jean ha scritto:

Thanks Tommaso, It works, but the user_id has this User:0x007fe37d33b5e0
no User:1, is that ok???

Don’t confuse the actual data (saved on db) and the representation of it
in the views. You see the representation of the User model, which is
composed of user attributes (like @user.id, etc.).
My advice is to play with rails console to clarify your doubts

That User: 0x007fe37d33b5e0 you see is the object id for that User
object
that was created. Thats ruby’s ID for it. Your’s is contained inside
that
object. Don’t confuse 0x007fe37d33b5e0 with being the .id field inside
that
user. Two very different things. The .id field (@user.id) is the
database
assigned ID, while the 0x007fe37d33b5e0 is the object id for ruby to
track the user object in memory. Hope this helps you understand the
difference between the two.