rmk*_*rmk 3 activerecord jrubyonrails ruby-on-rails-3
我正在尝试实现一种功能,其中一旦设置了属性,就无法在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
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?一旦我尝试更改地址,我希望该对象无效,但我没有遇到任何错误obj.valid?
编辑:一旦设置值,该值不会更改,但是当我通过obj.valid进行验证时,我想获得无效对象?
执行此操作时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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2478 次 |
| 最近记录: |