我有两个模型User
和PostalAddress
。由于各种原因,我想将纬度和经度存储在User
而不是PostalAddress
上。如果邮政地址发生变化,我希望更新坐标。
class PostalAddress < ApplicationRecord
belongs_to :user
# ...
end
我相信我想做这样的事情:
class User < ApplicationRecord
has_one :postal_address, dependent: :destroy, required: true
before_save :update_coords, if: :will_save_change_to_postal_address?
但失败并显示以下错误:
NoMethodError: undefined method `will_save_change_to_postal_address?'
但是,它适用于实际上属于User
的属性:
before_save :update_coords, if: :will_save_change_to_email_address?
我还了解了:after_add
和:before_add
回调,但我知道它们仅适用于has_many
集合。
相关记录更改时如何触发回调?
答案 0 :(得分:1)
在PostalAddress模型中执行before_save,然后调用该方法以更新用户的经度和纬度。
class PostalAddress < ApplicationRecord
belongs_to :user
before_save :update_coords, if: :will_save_change_to_postal_address?
# ...
private
def update_coords
self.user.update_coordinates
end
end
答案 1 :(得分:1)
如果邮政地址发生变化,我希望更新坐标。
class PostalAddress < ApplicationRecord
before_save :update_coords
def update_coords
# here you can check specific attributes changes if required, else it will call every time PostalAddress changes
user.update(lat: calculated_value1, long: calculated_value2)
end
end