2012-02-10 9 views
7

Ho due modelli:
User (e-mail: stringa)
Profile (name: String)
Rails chiamata aggiornamento delegato

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' 

Perché il profilo non viene aggiornato (salvato solo per la prima volta)? Come risolvere questo?

risposta

1

Questa domanda sembra familiare :)

appena provato questo e funziona:

after_save :save_profile, :if => lambda {|u| u.profile } 

def save_profile 
    self.profile.save 
end 

Nota a margine:

vi consiglio di aggiungere un po 'default scope per caricare sempre la profile lungo la user se spesso usi entrambi i modelli.

Problemi correlati