Переменные экземпляра активной записи Rails - PullRequest
6 голосов
/ 31 марта 2009

Мои вопросы касаются этого AR и его переменной экземпляра @ сохранено

 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

Насколько я понимаю, переменные экземпляра сохранят свои значения в течение существования экземпляра.

При использовании этого AR в моем контроллере сохраняется? всегда возвращает ложь ..

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

Чего мне не хватает в отношении этих переменных экземпляра? Спасибо

1 Ответ

7 голосов
/ 31 марта 2009

вы используете переменную экземпляра @saved внутри метода класса, тогда переменная @saved принадлежит классу, а не его экземплярам, ​​поэтому вы не можете вызвать его из метода экземпляра, такого как #saved?.

что вы можете сделать, это добавить в начало класса:

  attr_accessor :saved

и внутри метода create_phone_number замените:

  @saved = true

с:

  @new_phone.saved = true

тогда должно работать

...