2016-08-01 3 views
1

特定の住所の特定の郵便番号をテストするのに問題があります。私は、モデルで継承され、検証される心配があります。それは、ユーザーが位置している状態と一致しないデフォルトの郵便番号を入力する別の問題を修正します。しかし、私は最終的に、この時点までに欠陥があった郵便番号を修正するために移行を実行する必要があります。それは私の問題に私をもたらします。特定の懸念事項をテストする方法はありますか?または、この問題でコンソールを使って書かれた方法はありますか?レールコンソールを使ってレールメソッドをテストする方法

私の懸念は以下の通りです。

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?を試してみましたが、欠落しています。誰かが私がここで行方不明を知っているだろうか?

答えて

3

UserモデルにStateMatchesZipCodeConcernが含まれているとします。

これは、方法validate_against_multi_state_zip_codesUserインスタンスのメソッドになることを意味します。

Useraddressメソッドの返信でこのメソッドを呼び出すと、NoMethodErrorがスローされます。さらに、このメソッドをprivateにしたので、とにかく呼び出すことはできません。

モジュールにprivateライン上の方法を入れて、このようにそれを呼び出す:User.last.validate_against_multi_state_zip_codes?

+0

あなたは素晴らしいです!どうもありがとうございます! – kdweber89

+1

http://i.imgur.com/9ld8MlW.gif – DiegoSalazar

関連する問題