创建或更新时,自动生成以下geocodes(获取地址坐标)。这是我的位置模型
def full_address
full_address = "#{address},#{city},#{state}"
end
geocoded_by :full_address
after_validation :geocode, :if => :address_changed?
但如果我将coords_locked
设置为true,我不希望完成地理编码。
我无法弄清楚如何做到这一点。我试过了
geocoded_by :full_address
after_validation :geocode, :if => { :coords_locked == false || :address_changed? }
正确的语法是什么,或者我认为这一切都错了。谢谢
PS。刚刚意识到我可能不需要full_address =
。
答案 0 :(得分:1)
我认为您需要Rails指南中的以下内容 - http://guides.rubyonrails.org/active_record_validations.html#using-a-proc-with-if-and-unless
最后,可以关联:if和:除非使用将要调用的Proc对象。使用Proc对象可以编写内联条件而不是单独的方法。此选项最适合单行。
所以也许是这样的:
after_validation :geocode,
if: Proc.new { |location| location.coords_locked? && location.address_changed? }
然后你可以设置一些范围来定义coords_locked?
和address_changed?