On Dec 4, 10:42 pm, Vasu Kottilil <[email protected]> wrote:
> Hi Fred,
>
> Thank you so much for the quick response. It was quite helpful.  I
> really wanted to test this out with out upgrading to the newer
> version. I made the changes to view/params
> submittal and the controller code and now it seems to be working. I
> can see two saved records after a create event.
>

I think you're making things a little too complicated

doing

@user = User.new(params[:user])  ## --> line 45
@address = @user.address.build(params[:address])

is fine, as long as the two sets of parameters aren't munged together.
(eg use fields_for @address to create a separate form builder)

Fred
> new.html.erb:
>
> <% form_for( @user,
>              :url => {  :action => 'create',
>                         :first_name => @user.first_name,
>                         :last_name => @user.last_name,
>                         :home_phone => @user.home_phone,
>                         :work_phone => @user.work_phone,
>                         :cell_phone => @user.cell_phone,
>                         :email => @user.email,
>                         :profile_name => @user.profile_name,
>                         :active => @user.active,
>                         :address1 => @address.address1,
>                         :address2 => @address.address2,
>                         :city => @address.city,
>                         :state => @address.state,
>                         :country => @address.country
>                     }
>           ) do | f |
> %>
>
> ----- rest of the form fields ---
>
> In the users_controller.rb, removed the previous build invocation and
> put these lines of code to manually set the FK for the association.
>
> def create
>
>     Rails.logger.debug(params)
>     @user = User.new
>     @address = Address.new
>
>     @user.first_name = params[:user][:first_name]
>     @user.last_name = params[:user][:last_name]
>     @user.profile_name = params[:user][:profile_name]
>     @user.home_phone = params[:user][:home_phone]
>     @user.work_phone = params[:user][:work_phone]
>     @user.cell_phone = params[:user][:cell_phone]
>     @user.email = params[:user][:email]
>     @user.active = params[:user][:active]
>
>     @address.address1 = params[:user][:address][:address1]
>     @address.address2 = params[:user][:address][:address2]
>     @address.city = params[:user][:address][:city]
>     @address.state = params[:user][:address][:state]
>     @address.zip = params[:user][:address][:zip]
>     @address.country = params[:user][:address][:country]
>
>     respond_to do |format|
>
>         if @user.save
>           @address.user_id = @user.id
>           if @address.save
>             flash[:notice] = 'User was successfully created.'
>
> Thanks again for the excellent comments,
>
> best regards
> Vasu
>
> Vasu Kottilil
>
> On Dec 4, 11:09 am, Frederick Cheung <[email protected]>
> wrote:
>
>
>
> > On Dec 4, 6:58 pm, Vasu Kottilil <[email protected]> wrote:
>
> > > {"commit"=>"Create",
> > >  "authenticity_token"=>"1459525ad4fd5ae39be0c011edc5c45fdbff4337",
> > >  "user"=>{"work_phone"=>"",
> > >  "address"=>{"address1"=>"ad1",
> > >  "city"=>"any town",
> > >  "address2"=>"line2",
> > >  "zip"=>"12345",
> > >  "country"=>"USA",
> > >  "state"=>"CA"},
> > >  "profile_name"=>"pfname",
> > >  "home_phone"=>"",
> > >  "cell_phone"=>"",
> > >  "last_name"=>"last",
> > >  "first_name"=>"first",
> > >  "email"=>"",
> > >  "active"=>"1"}}
>
> > > It is a simple 1-1 relationship - each user has one address. In this
> > > use case I am trying to create data in two tables using a single
> > > form.
>
> > your code looks like you expect params[:address] to be set, but it
> > isn't (instead params[:user][:address] is set).
> > Rails is then trying to do user.address = params[:user][:address]
> > which doesn't work because you're trying to stuff a hash into an
> > association. It can be made to work with the nested attributes stuff
> > but that's only in rails 2.3. You could change your views to not
> > submit parameters in this way or read up on nested attributes.
>
> > Fred
>
> > > I am certain that I am missing some more code that is required to
> > > successfully save. Any clues greatly appreciated. Any suggestions to
> > > implement in a different way are welcome.  Can I explicitly write ruby
> > > code to insert records into these tables even though I created the
> > > objects using the rails scaffolding?
>
> > > Thanks much
>
> > > Vasu Kottilil

--

You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.


Reply via email to