7

我的问题是关于这个 AR 及其实例变量 @saved

 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

关于这些实例变量,我缺少什么?谢谢

4

1 回答 1

8

您在类方法中使用实例变量@saved,然后@saved var 属于该类,而不是它的实例,因此您不能从#saved 之类的实例方法调用它?

你可以做的是,在类的顶部添加:

  attr_accessor :saved

在 create_phone_number 方法中,替换:

  @saved = true

和:

  @new_phone.saved = true

那么它应该工作

于 2009-03-31T19:18:56.047 回答