如何通过rails控制台测试rails方法

时间:2016-08-01 16:56:59

标签: ruby-on-rails ruby

我在特定地址中测试特定邮政编码时遇到问题。我有一个在模型中继承和验证的问题。它解决了用户输入与它们所处的状态不匹配的默认邮政编码的另一个问题。但是我最终需要运行迁移来修复任何已经存在缺陷的邮政编码。这让我想到了我的问题。有没有办法通过控制台测试一个特定的问题或者在这个问题上编写的方法?

我的担忧如下。

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?并最终找不到方法。有人知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:3)

我假设您在StateMatchesZipCodeConcern模型中加入User

这意味着方法validate_against_multi_state_zip_codes将成为User个实例的方法。

您尝试在返回User的{​​{1}}方法时调用此方法,这就是抛出address的方法。此外,您已经使用此方法NoMethodError,因此无论如何您都无法调用它。

将方法放在模块中的private行上方并按以下方式调用:private