Rails检查字段值是否为该字段的默认值

时间:2016-01-07 15:35:22

标签: ruby-on-rails activerecord default

我在number模型上有一个名为Address的字段,其默认值为0,设置为数据库级别。如果我Address.new.number,我会回复0

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

2 个答案:

答案 0 :(得分:8)

默认值可在Address.column_defaults中以{"column" => default}的哈希值

进行访问
Address.column_defaults
#=> {"number" => 0, "street" => nil, ...}

您还可以使用Rails提供的<attribute>_changed?方法。除非您使用非默认值初始化对象,否则这将是false

Address.new.number_changed? #=> false
Address.new(number: 1).number_changed? #=> true

所以您的before_create可能如下:

before_create :callback, if: :number_changed?

答案 1 :(得分:1)

使用列有什么用?

Address.columns_hash['number'].default 

应该给你想要的

所以也许这样的事情

before_create :callback, unless: Proc.new { |address| address.number == Address.columns_hash['number'].default }

但是使用像number_changed?

这样的东西似乎有些奇怪
相关问题