条件活动记录回调

时间:2016-02-22 03:07:40

标签: ruby-on-rails activerecord conditional

创建或更新时,自动生成以下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 =

1 个答案:

答案 0 :(得分:1)

我认为您需要Rails指南中的以下内容 - http://guides.rubyonrails.org/active_record_validations.html#using-a-proc-with-if-and-unless

5.3使用Proc with:if和:unless

最后,可以关联:if和:除非使用将要调用的Proc对象。使用Proc对象可以编写内联条件而不是单独的方法。此选项最适合单行。

所以也许是这样的:

  after_validation :geocode,
    if: Proc.new { |location| location.coords_locked? && location.address_changed? }

然后你可以设置一些范围来定义coords_locked?address_changed?