【问题标题】:Flag invalid attribute in ActiveRecord在 ActiveRecord 中标记无效属性
【发布时间】:2011-03-01 19:56:03
【问题描述】:

我正在尝试实现一个功能,其中一旦设置属性,就无法在 ActiveRecord 模型上更改。为此,我编写了以下方法:

def address
 self[:address]
end

def address=(val)
 if new_record?
  self[:address] = val
 else
  errors.add(:address, "Cannot change address, once it is set")
  return false # tried return nil here first, did not work
 end
end

我在这里做错了吗?一旦我尝试更改地址,我希望该对象无效,但是当我这样做obj.valid?时我没有收到任何错误@

编辑:值一旦设置就不会改变,但是当我通过 obj.valid 进行验证时我想获得无效对象?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord jrubyonrails


    【解决方案1】:

    当您执行obj.valid? 时,它会清除您的所有错误,然后依次运行每个验证。要让它在验证时产生错误,您必须将该逻辑移动到验证块中。

    下面是使用实例变量的一种方法示例:

    def address=(val)
      if new_record?
        self[:address] = val
      else
        @addr_change = true
        return false # tried return nil here first, did not work
      end
    end
    
    validate do |user|
      errors.add(:address, "Cannot change address, once it is set") if @addr_change
    end
    

    【讨论】:

    • 呃!我应该想到的。谢谢!
    • 没问题。我为后代添加了一个代码示例,以防其他人提出同样的问题。 :-)
    • 谢谢谢谢谢谢!这就是我为我的遗留项目寻找了几个小时的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2017-03-18
    • 2018-04-19
    • 2014-06-23
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多