我正在尝试实现一个功能,其中一旦设置属性,就无法在 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 进行验证时我想获得无效对象?
最佳答案
当您执行 obj.valid?
时,它会清除您的所有错误,然后依次运行每个验证。要让它在验证时产生错误,您必须将该逻辑移动到验证 block 中。
下面是使用实例变量的一种方法示例:
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
关于ruby-on-rails-3 - 在 ActiveRecord 中标记无效属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5159612/