ste*_*ard 7 activerecord ruby-on-rails instance-variables
我的问题是关于这个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
Run Code Online (Sandbox Code Playgroud)
我的理解是,实例变量将通过实例的存在来保持它们的值.
在我的控制器中使用此AR时,保存了吗?总是返回false ..
@phone_number = PhoneNumber.create_phone_number(@active_user, params[:phone_number])
puts "add_phone_number"
if @phone_number.saved? => always false
Run Code Online (Sandbox Code Playgroud)
关于这些实例变量我缺少什么?谢谢
你在类方法中使用实例变量@saved,@saved var然后属于类,而不属于它的实例,所以你不能从像#saved?这样的实例方法调用它.
你能做什么,是在课堂顶部添加:
attr_accessor :savedRun Code Online (Sandbox Code Playgroud)
并在create_phone_number方法内,替换:
@saved = trueRun Code Online (Sandbox Code Playgroud)
有:
@new_phone.saved = trueRun Code Online (Sandbox Code Playgroud)
那它应该工作
| 归档时间: |
|
| 查看次数: |
8015 次 |
| 最近记录: |