Assigning default values to attributes in a has_one associat


#1

Hi List,

I’ve a little problem here, for which I can’t find a solution:

I have two models, person and event. Event is a polymorphic association
(timeable). In my person model I would like to define an association
with
Events:

class Person < ActiveRecord::Base

has_one birthday,
    :dependent => :destroy,
    :as => :timeable,
    :class_name => "Event",
    :foreign_key => :timeable_id,
    :conditions => "category = 'birthday'"

end

As you can see, there’s a category field in the event table, which
should
contain the category of the Event. In this case, is should
contain “birthday”.

I would like this category attribute to get set automatically to
“birthday”
whenever I create a new association.

So, calling simething like

@client.build_birthday(params[:birthday])

in my controller should set the category attribute to “birthday”. I was
trying
something like:

has_one birthday,
    :dependent => :destroy,
    :as => :timeable,
    :class_name => "Event",
    :foreign_key => :timeable_id,
    :conditions => ['category = ?', name.to_s] do
        self.category = "birthday"
    end

But this seems not to work.

Also there are callbacks for collection associations (i.e. before_add
and
after_add), but this does not work with has_one associations.

So, what would be the best way of doing womthing like this (I sure there
is at
least one way…)

Regards,
Timo