ruby-on-rails-3 - 在 ActiveRecord 中标记无效属性

标签 ruby-on-rails-3 activerecord jrubyonrails

我正在尝试实现一个功能,其中一旦设置属性,就无法在 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/

相关文章:

ruby-on-rails-3 - gmaps4rails - 许多标记,一个位置 - 如何查看?

ruby-on-rails - 任何示例如何通过 Rails 中的延迟作业进行批量更新

jruby - Myapp::Application::Railties 常量在 Rails 4 beta 和 Jruby jruby-1.7.2 中丢失

ruby-on-rails-3 - Rails 3.1 RC4 移除附件不移除!

html - 防止语言环境文件中的 HTML 字符实体被 Rails3 xss 保护破坏

ruby-on-rails - 相关引用值未显示在列表中

ruby-on-rails - 如何在 Rails 3 中测试 cookies.permanent.signed

JRuby 1.7.1 和 PsychParser 解析 UTF-8 YAML 文件时出错 (Rails 3.2.8)

ruby-on-rails - 从 Ruby 的角度来看,edit_post_path 是什么

ruby-on-rails - 在初始化时建立关联以满足委托(delegate)的需求