如果邮政编码与输入的状态不匹配,我有一个问题是检查地址和邮政编码,以便返回错误。除非问题得到解决,否则我也不希望保存邮政编码。
我遇到的问题是,如果我提交表单,创建中的错误消息弹出,我无法进入下一页,但不知何故默认的邮政编码仍然是保存。这只发生在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