2009-03-31 15 views
6

Mi pregunta es en lo que respecta a esta AR y su variable de instancia @savedRieles activos Variables de registro de instancia

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 

Es mi entendimiento de que las variables de instancia mantendrán sus valores a través de la existencia de la instancia.

Al usar este AR en mi controlador, ¿guardado? siempre devuelve falso ...

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

¿Qué me falta en lo que respecta a estas variables de instancia? Gracias

Respuesta

7

está usando la variable de instancia @saved dentro de un método de clase, la var @saved pertenece entonces a la clase, no a sus instancias, por lo que no puede llamar desde un método de instancia como #saved ?.

lo que puede hacer, es decir, en la parte superior del complemento clase:

attr_accessor :saved

y dentro del método create_phone_number, reemplace:

@saved = true

con:

@new_phone.saved = true

entonces debería funcionar

+0

excelente ese era el problema Gracias por aclararme esto – stellard

Cuestiones relacionadas