【问题标题】:Rails geocoder attributeRails 地理编码器属性
【发布时间】: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


    【解决方案1】:

    只需传递该字段以检查您的 after_validation 中的脏污程度,如

    after_validation :geocode, :if => :address_changed?
    

    【讨论】:

    • 如果我想检查 2 个属性中的 1 个是否发生了变化怎么办?
    • 只需将符号指向您进行检查的方法
    【解决方案2】:

    我认为最好的解决方案是在您的模型中包含 ActiveModel::Dirty,然后您可以在回调中检查它

    class MyModel < ActiveRecord::Base
      def after_save
         if address_changed? do
           #some stuff..
         end
      end
    end
    

    ActiveModel::Dirty

    【讨论】:

      【解决方案3】:

      对我来说,最优雅的解决方案是根据要进行地理编码的属性(地址)是否已更改来使用条件验证。您可以在您正在地理编码的模型的“after_validation”回调中执行类似的操作,或者将其放置在适合您目的的任何 Active Record 回调中:

      after_validation :geocode, :if =&gt; lambda{ |obj| obj.address_changed?}

      【讨论】:

      • 如果我想检查 2 个属性中的 1 个是否发生了变化怎么办?
      猜你喜欢
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多