我的问题是关于这个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时,保存了吗?总是返回false ..
@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
那它应该工作