2010-11-02 9 views
1

J'ai une méthode after_create pour mon modèle Contact.est-ce qu'une méthode de rappel after_created Rails sur un modèle a une instance du modèle nouvellement créé?

Cependant, quand je mets la valeur, elle est nulle. Comment puis-je avoir un rappel pour un modèle nouvellement créé (je fais une bonne quantité de transformation dans le modèle de création) référencé dans la méthode de rappel?

after_save :update_company 

def update_company 

    puts self.inspect 
    puts self.company 

    if company.phone.empty? 

     company.phone = self.phone 
     company.save 

    end  

end 

Quand je regarde les journaux pour self.inspect, il ne montre aucune des transformations utilisées dans la méthode de création ... encore, cela devrait fonctionner seulement après avoir créé (et enregistré), l'objet, non?

Voici la méthode de création:

def create 

    @contact = Contact.create(params[:contact]) 

    unless @contact.vcard.path.blank? 

      paperclip_vcard = File.new(@contact.vcard.path) 

     @vcard = Vpim::Vcard.decode(paperclip_vcard).first 
     @contact.title = @vcard.title 
     @contact.email = @vcard.email 
     @contact.first_name = @vcard.name.given 
     @contact.last_name = @vcard.name.family 
     @contact.phone = @vcard.telephone 
     @contact.address.street1 = @vcard.address.street 
     @contact.address.city = @vcard.address.locality 
     @contact.address.state = @vcard.address.region 
     @contact.address.zip = @vcard.address.postalcode 
     @contact.company_name = @vcard.org.fetch(0) 

    end 

    @contact.user_id = current_user.id # makes sure every new user is assigned an ID  
    if @contact.save 
     flash[:notice] = "Successfully created contact." 
     redirect_to @contact 
    else 
     render :action => 'new' 
    end 
    end 
+0

'si company.phone.blank?' Essayer que – s84

+0

je mets tout un tas de choses dans la méthode de création .... ne après-create signifie qu'il fera après il traverse la méthode de création ... parce qu'il ne semble pas le faire .... – Angela

Répondre

4

Oui, cela se produit parce que vous n'avez pas utilisé l'auto lors de l'attribution de la valeur à l'objet de l'entreprise.

En ruby, en général vous ne nécessitent pas l'utilisation ont « soi » pour récupérer les attributs d'une instance

par exemple dans votre code. vous pouvez puts company et cela fonctionnerait bien. Mais lors de l'attribution (sur le côté gauche), vous devez toujours utiliser self.

alors changez ceci dans votre code.

 
    self.company.phone = self.phone 
    company.save 

ou

 
    self.company.phone = phone 
    company.save 
+0

en fait, j'ai trouvé que si le contrôleur a un créer, il utilise comme une sauvegarde, de sorte qu'il se passait trop tôt. .. – Angela