2016-08-01 6 views
1

Ich habe Probleme beim Testen bestimmter Postleitzahlen an bestimmten Adressen. Ich habe ein Anliegen, das in einem Modell vererbt und validiert wird. Es behebt ein weiteres Problem von Benutzern, die Standard-Postleitzahlen eingeben, die nicht mit den Zuständen übereinstimmen, in denen sie sich befinden. Ich muss jedoch letztendlich eine Migration ausführen, um alle bis dahin fehlerhaften Postleitzahlen zu reparieren. Was mich zu meinem Problem bringt. Gibt es eine Möglichkeit, ein bestimmtes Anliegen oder eine Methode, die in dieser Angelegenheit geschrieben wurde, überhaupt über die Konsole zu testen?So testen Sie eine Schienenmethode über die Schienenkonsole

Mein Anliegen ist unten.

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 

Ich habe User.last.address.validate_against_multi_state_zip_codes? versucht und aufzuwickeln mit einem Verfahren fehlt. Würde jemand wissen, was ich hier vermisse?

Antwort

3

Ich gehe davon aus, dass Sie StateMatchesZipCodeConcern in Ihrem User Modell einschließen.

Das bedeutet, dass die Methode validate_against_multi_state_zip_codes eine Methode auf User Instanzen wird.

Sie versuchen, diese Methode auf die Rückkehr der User 's address Methode, die NoMethodError löst, zu nennen. Außerdem haben Sie diese Methode private so gemacht, dass Sie es sowieso nicht aufrufen können.

Setzen Sie das Verfahren über der private Linie in dem Modul und rufen Sie es wie folgt: User.last.validate_against_multi_state_zip_codes?

+0

Sie sind genial! Ich danke dir sehr! – kdweber89

+1

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