2009-03-31 12 views
6

moje pytania jest w odniesieniu do tej AR i jego zmienna instancji @savedSzyny Aktywni Zmienne Record instancji

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 

To jest moje zrozumienie, że zmienne instancji będzie trzymać ich wartości poprzez istnienie instancji.

Podczas korzystania z tego AR w moim kontrolerze, zapisane? zawsze zwraca false ..

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

Co mi brakuje w odniesieniu do tych zmiennych instancji? Dziękuję

Odpowiedz

7

używasz zmiennej instancji @zapisanej w metodzie klasy, @saved var należy do klasy, a nie do jej wystąpień, więc nie możesz wywołać go z metody instancji takiej jak #saved ?.

co można zrobić, jest na szczycie klasy dodają:

attr_accessor :saved

i wewnątrz metody create_phone_number wymienić:

@saved = true

z:

@new_phone.saved = true

to powinno zadziałać

+0

doskonała , to był problem. Dziękuję za wyjaśnienie mi tego – stellard

Powiązane problemy