ruby-on-rails - Rails 事件记录实例变量

标签 ruby-on-rails activerecord 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

我的理解是,实例变量将通过实例的存在来保持它们的值。

在我的 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/

相关文章:

java - 按钮单击 JSF 2.2 时 bean 中的实例变量增量

javascript - 复杂形式 - 如何为每个新元素生成新的 object_ids?

ruby-on-rails - .join/has_one 的 ActiveRecord .where :through

ruby-on-rails-3 - Rails 3 中一个 AR 模型内的多个数据库表

ios - 如何/在哪里声明用于编写objective-c代码的接口(interface)、实现、程序格式中的实例变量?

java - 使用变量创建类与将变量作为参数传递到方法中

ruby-on-rails - Rails/Ember-active_model_serializer-侧面加载时未定义的方法 `object'

ruby-on-rails - 使用带有数字范围的步长的 rails 生成选择标签

ruby-on-rails - 如何为资源调用动态设置用户密码

mysql - 将 sql 查询转换为 ActiveRecord Rails