Reputation: 15791
I have two models:
User
(email:string)
Profile
(name:string)
class User < ActiveRecord::Base
has_one :profile
delegate :name, :name=, :to => :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
end
rails c
u = User.new
u.build_profile #=> init Profile
u.name = 'foo'
u.email = '[email protected]'
u.save #=> both User and Profile are saved
u.name = 'bar'
u.save #=> true, but changes in Profile were not saved!
u.email = '[email protected]'
u.save #=> true, new User email was saved, Profile - still not!
u.name #=> 'bar', but in database it's 'foo'
Why the Profile is not being updated(saved only for the first time)? How to fix this?
Upvotes: 8
Views: 3602
Reputation: 3869
ArcaneRain, you should add the 'autosave' option on your relationship instead of adding a callback for that:
has_one :profile, :autosave => true
you should also investigate the 'dependent' options. More info here: http://guides.rubyonrails.org/association_basics.html#has_one-association-reference
Upvotes: 14
Reputation: 115541
This question looks familiar :)
Just tried this and it works:
after_save :save_profile, :if => lambda {|u| u.profile }
def save_profile
self.profile.save
end
Sidenote:
I advise you to add some default scope to always load the profile
along the user
if you often use both models.
Upvotes: 1