【发布时间】:2023-04-04 20:26:01
【问题描述】:
在rails中是否可以创建一个函数,每次更改特定属性时,rails都会执行一个函数。就我而言,每次 object.address(我有 geocoded_by :address 和 after_validation :geocode)被更改时,我都想做 object.geocode。我在轨道上 3
【问题讨论】:
标签: ruby-on-rails model attributes controller geocode
在rails中是否可以创建一个函数,每次更改特定属性时,rails都会执行一个函数。就我而言,每次 object.address(我有 geocoded_by :address 和 after_validation :geocode)被更改时,我都想做 object.geocode。我在轨道上 3
【问题讨论】:
标签: ruby-on-rails model attributes controller geocode
只需传递该字段以检查您的 after_validation 中的脏污程度,如
after_validation :geocode, :if => :address_changed?
【讨论】:
我认为最好的解决方案是在您的模型中包含 ActiveModel::Dirty,然后您可以在回调中检查它
class MyModel < ActiveRecord::Base
def after_save
if address_changed? do
#some stuff..
end
end
end
【讨论】:
对我来说,最优雅的解决方案是根据要进行地理编码的属性(地址)是否已更改来使用条件验证。您可以在您正在地理编码的模型的“after_validation”回调中执行类似的操作,或者将其放置在适合您目的的任何 Active Record 回调中:
after_validation :geocode, :if => lambda{ |obj| obj.address_changed?}
【讨论】: