Has_one association and saving the associated model

Hi,

what’s the best way of assigning a has_one association to a model and
then
save both, the model and the association, in one step? I
thought “build_association” just assigns the association and not updates
it
in the database.

In my current situation this leads to a double saving of my association.
First
it get’s updated an then a new association gets created.

I’ve two models: “client” and “birthday”. Birthday is a has_one
association of
client:

class Client < ActiveRecord::Base
has_one :birthday, :dependent => :destroy
end

In the “update” action of the client controller I’ve something like
this:

def update
@client = Client.find(params[:id])
@client.attributes = params[:client]
@client.build_birthday(params[:birthday])

respond_to do |format|
    if @client.save
        format.html { redirect_to client_url(@client) }
        format.xml  { head :ok }
    else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @client.errors.to_xml }
    end
end

end

First, when executing the line
@client.build_birthday(params[:birthday]), the
current associated birthday object in the database gets updated. Next,
when
@client.save gets executed, a new birthday-object gets created in the
database (and the foreign key of the old entry gets deleted). This leads
to
many, not assigned entrys in my database.

If I just use @client.birthday.attributes = params[:birthday] instead of
build_birthday, no birthday at all gets saved. So, what’s the best was
of
assigning a has_one association without saving it?

Regards,
Timo

dear sender,
i´m out of the office until may 29th.
your email will not be forwarded.
for urgent stuff please contact [email protected]
kind regards,
alexander

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs