我在特定地址中测试特定邮政编码时遇到问题。我有一个在模型中继承和验证的问题。它解决了用户输入与它们所处的状态不匹配的默认邮政编码的另一个问题。但是我最终需要运行迁移来修复任何已经存在缺陷的邮政编码。这让我想到了我的问题。有没有办法通过控制台测试一个特定的问题或者在这个问题上编写的方法?
我的担忧如下。
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
我已经尝试了User.last.address.validate_against_multi_state_zip_codes?
并最终找不到方法。有人知道我在这里缺少什么吗?
答案 0 :(得分:3)
我假设您在StateMatchesZipCodeConcern
模型中加入User
。
这意味着方法validate_against_multi_state_zip_codes
将成为User
个实例的方法。
您尝试在返回User
的{{1}}方法时调用此方法,这就是抛出address
的方法。此外,您已经使用此方法NoMethodError
,因此无论如何您都无法调用它。
将方法放在模块中的private
行上方并按以下方式调用:private