ruby-on-rails - Rails 检查字段值是否是该字段的默认值

标签 ruby-on-rails activerecord default

我有一个名为 number 的字段在 Address模型,默认值为 0在数据库级别设置。如果我这样做 Address.new.number ,我会得到0背部。

现在,我想触发一个 before_create仅当 number != <default value> 时回调.所以,我会有 before_create :callback, unless: <condition> .如何使用一些 Rails“逻辑”来检查这个?我知道我可以比较 0 ,但我宁愿与 Rails 检索到的动态值进行比较。

最佳答案

默认值可在 Address.column_defaults 中访问作为 {"column" => default} 的散列:

Address.column_defaults
#=> {"number" => 0, "street" => nil, ...}

您也可以使用 <attribute>_changed? Rails 提供的方法。这将是 false除非您使用非默认值初始化对象。
Address.new.number_changed? #=> false
Address.new(number: 1).number_changed? #=> true

所以你的 before_create看起来像:
before_create :callback, if: :number_changed?

关于ruby-on-rails - Rails 检查字段值是否是该字段的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34659093/

相关文章:

maven - 如何在我的 Maven 默认配置文件中运行插件,但如果指定了另一个配置文件,则阻止这些插件运行?

ruby-on-rails - 更改模型的主键属性时,Rails FactoryGirl 重复键值违反唯一约束

ruby-on-rails - 在没有模型的情况下访问 ActiveRecord 关联

powershell - 在没有 OutFile 的情况下调用 WebRequest?

c++ - 默认初始化与零初始化

php - 比较两个时间戳 Codeigniter

ruby-on-rails - 我可以在 database.yml 中指定 rails 环境应该对数据库具有只读访问权限吗?

ruby-on-rails - 如何在 Rails 中编写增加天数的助手?

ruby-on-rails - 如何从Sunspot Solr Rubygem旋转,覆盖或关闭日志记录?

ruby-on-rails - 西类牙语中有一些官方的Activerecord错误翻译吗?