我的问题是关于这个 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
我的理解是,实例变量将通过实例的存在来保持它们的值。
在我的 Controller 中使用这个 AR 时,保存了吗?总是返回假..
@phone_number = PhoneNumber.create_phone_number(@active_user, params[:phone_number])
puts "add_phone_number"
if @phone_number.saved? => always false
关于这些实例变量,我缺少什么?谢谢
最佳答案
您在类方法中使用实例变量@saved,然后@saved var 属于该类,而不属于其实例,因此您不能从#saved? 之类的实例方法中调用它。
你可以做的是,在类的顶部添加:
attr_accessor :saved
在 create_phone_number 方法中,替换:
@saved = true
和:
@new_phone.saved = true
那么它应该工作
关于ruby-on-rails - Rails 事件记录实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702587/