Update on Observer fails validation

Hi, I’m puzzzled…

I have this model:

class UserCampaign < ActiveRecord::Base

belongs_to :user

belongs_to :campaign

attr_accessible :is_active, :user_id, :campaign_id

validates_presence_of :is_active, :user_id, :campaign_id

end

and have this observer:

class UserCampaignObserver < ActiveRecord::Observer

def after_create(user_campaign)

update_active(user_campaign)

end

def after_update(user_campaign)

update_active(user_campaign)

end

private

def update_active(user_campaign)

if user_campaign.is_active

ucs = UserCampaign.find_all_by_user_id_and_is_active(user_campaign.user.id,true)

for uc in ucs do

if uc.id != user_campaign.id

uc.is_active = false

uc.save!

end

end

end

end

end

This is simple to guarantee that only one UserCampaign is active.

The problem is that when the observer runs, in uc.save!, the validation fails giving me an error saying that the attribute is_active is required…

If I remove is_required attribute from the list of validates_presence_of, everything goes fine.

Why it gives me that error saying that is_active is required when I have set it just before the save in the observer?

Thanks,

Just to add more information, I’m using RoR 2.3.5.

Thanks

validates_presence_of checks the attribute according to Object.blank?
"An object is blank if it‘s false, empty, or a whitespace string. For
example, "", " ", nil, [], and {} are blank."
When you set a value to false it does not pass the validation.
If you want to confirm that a value is either true or false you will
have to it in another way.

Jonhy Pear wrote: