我在number
模型上有一个名为Address
的字段,其默认值为0
,设置为数据库级别。如果我Address.new.number
,我会回复0
。
现在,我想仅在before_create
时触发number != <default value>
回调。所以,我会before_create :callback, unless: <condition>
。如何使用一些Rails&#34;逻辑&#34;来检查这个?我知道我可以与0
进行比较,但我宁愿与Rails检索到的动态值进行比较。
答案 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?