2009-03-31 13 views
6

Mes questions est en ce qui concerne cette AR et sa variable d'instance @savedRails variables actives enregistrement d'instance

class PhoneNumber < ActiveRecord::Base 
has_one :user 
validates_presence_of :number 

def self.create_phone_number(user, phone_hash) 
    @new_phone = PhoneNumber.new(phone_hash) 
    @user = user 
    PhoneNumber.transaction do 
     @user.phone_numbers << @new_phone 
     @new_phone.save! 
     @user.save! 
    end 
    @saved = true 
    return @new_phone 
rescue ActiveRecord::RecordInvalid => invalid 
    @saved = false 
    return @new_phone 
end 

def saved? 
    @saved ||= false 
end 
end 

Je crois comprendre que les variables d'instance conserveront leurs valeurs par l'existence de l'instance.

Lorsque j'utilise cet AR dans mon contrôleur, enregistré? renvoie toujours false ..

@phone_number = PhoneNumber.create_phone_number(@active_user, params[:phone_number]) 
puts "add_phone_number" 
if @phone_number.saved? => always false 

Qu'est-ce qui me manque en ce qui concerne ces variables d'instance? Merci

Répondre

7

Vous utilisez la variable d'instance @saved dans une méthode de classe, la @saved var appartient alors à la classe, pas à ses instances, donc vous ne pouvez pas l'appeler à partir d'une méthode d'instance comme #saved ?.

ce que vous pouvez faire, est, au sommet du module de classe:

attr_accessor :saved

et à l'intérieur de la méthode create_phone_number, remplacer:

@saved = true

avec:

@new_phone.saved = true

alors ça devrait marcher

+0

excellent , c'était le problème. Merci de me l'avoir précisé – stellard

Questions connexes