在保存验证无法正常工作之前

时间:2016-07-29 19:11:21

标签: ruby-on-rails ruby

如果邮政编码与输入的状态不匹配,我有一个问题是检查地址和邮政编码,以便返回错误。除非问题得到解决,否则我也不希望保存邮政编码。

我遇到的问题是,如果我提交表单,创建中的错误消息弹出,我无法进入下一页,但不知何故默认的邮政编码仍然是保存。这只发生在edit上。验证正在进行新的。

我不知道是否需要分享我的控制器,如果我确实让我知道,我当然会。

在我的模特中我只有一个

include StateMatchesZipCodeConcern

before_save :verify_zip_matches_state

这是我关注的问题

module StateMatchesZipCodeConcern
  extend ActiveSupport::Concern

  def verify_zip_matches_state
    return unless zip.present? && state.present?

    state_search_result = query_zip_code

    unless state_search_result.nil?
      return if state_search_result.upcase == state.upcase
      return if validate_against_multi_state_zip_codes
    end
    errors[:base] << "Please verify the address you've submitted. The postal code #{zip.upcase} is not valid for the state of #{state.upcase}"
    false
  end

  private

  def query_zip_code
    tries ||= 3
    Geocoder.search(zip).map(&:state_code).keep_if { |x| Address::STATES.values.include?(x) }.first
  rescue Geocoder::OverQueryLimitError, Timeout::Error
    retry unless (tries -= 1).zero?
  end

  def validate_against_multi_state_zip_codes
    ::Address::MULTI_STATE_ZIP_CODES[zip].try(:include?, state)
  end
end

0 个答案:

没有答案