2009-03-31 18 views
6

Le mie domande è con riferimento a questa AR e la sua variabile di istanza @savedRails attivi variabili di istanza Record

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 

E 'la mia comprensione che le variabili di istanza non mancherà di tenere i loro valori attraverso l'esistenza dell'istanza.

Quando si utilizza questo AR nel mio controller, salvato? restituisce sempre false ..

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

Cosa mi manca in relazione a queste variabili di istanza? Grazie

risposta

7

stai usando la variabile di istanza @saved all'interno di un metodo di classe, la variabile @saved appartiene quindi alla classe, non alle sue istanze, quindi non puoi chiamarla da un metodo di istanza come #saved ?.

cosa si può fare, è, al vertice del componente aggiuntivo di classe:

attr_accessor :saved

e all'interno del metodo create_phone_number, sostituire:

@saved = true

con:

@new_phone.saved = true

allora dovrebbe funzionare

+0

eccellente questo era il problema Grazie per aver chiarito questo a me – stellard

Problemi correlati