2009-03-31 15 views
6

Meine Fragen ist in Bezug auf diesen AR und seine Instanzvariable @savedRails Active Record Instanzvariablen

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 ist mein Verständnis, dass die Instanzvariablen ihre Werte durch die Existenz der Instanz halten.

Bei Verwendung dieses AR in meinem Controller gespeichert? liefert immer falsch.

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

Was fehlt mir in Bezug auf diese Instanzvariablen? Danke

Antwort

7

Sie verwenden die Instanzvariable @saved innerhalb einer Klassenmethode, die @saved var gehört dann zur Klasse, nicht zu ihren Instanzen, also können Sie sie nicht von einer Instanzmethode wie #saved? Aufrufen.

was Sie tun können, ist, an der Spitze der Klasse add:

attr_accessor :saved

und innerhalb des create_phone_number Methode ersetzen:

@saved = true

mit:

@new_phone.saved = true

dann sollte es funktionieren

+0

ausgezeichnet Das war das Problem. Danke, dass du mir das erklärt hast – stellard

Verwandte Themen