2016-10-12 16 views
0

フォームを使用してAPIキーを入力すると、フォームを保存する前にAPIキーが有効な応答を返すことを確認したいと考えました。それ以外の場合は、(共通の検証エラーのような)エラーメッセージと共にフォームに戻ります。Rails:API呼び出しのフォーム検証

私はstackoverflowを見てみました:How do I perform validation on an api call while submitting form and produce necessary error message?

私は検証コードをテストしましたが、動作しますが、コントローラにあります。私はRailsでAPIを使用するのは初めてですが、フォームの検証はモデル内で行う必要があると考えていますが、モデルにコードを挿入するとエラーになります。

これは、私は、コントローラに持っているものです。

meetup_apikey = @group.meetup_apikey 
group_urlname = @group.meetup_urlname 

url = "https://api.meetup.com/2/events?key=#{meetup_apikey}&sign=true&photo-host=public&group_urlname=#{group_urlname}" 

    def test_api_responds_correctly(dataurl) 
    response = HTTParty.get(dataurl) 
    puts "\nAPI Response success: #{response.success?}\n\n" 

    case response.success? 
    when true 
     puts "-------" 
     puts "API Response code: #{response.code}" 
     puts "API Response message: #{response.message}" 
     puts "API Response body: #{response.body}" 

     puts 
     else 
     flash[:error] = "Invalid API key or group urlname" 
     end 
    end 

    # start the program 
    test_api_responds_correctly(url) 

私は正しいAPIキーと有効なグループURL名を入力した場合。ターミナルリターン:

API Response success: true 

------- 

API Response code: 200 

API Response message: OK 

API Response body: {"results":[{"utc_offset":-25200000,"venue":... }} 

、ユーザーが入力した情報と上記Group has been successfully updatedメッセージと共にページにリダイレクトされます。

私は、ターミナルに戻り、無効なAPIキーを入力した場合:

API Response success: false 

を、ユーザーが入力した情報をページにリダイレクトされます。上記のメッセージは Group has been successfully updatedInvalid API key or group url nameです。

これは意図したものではありません。一般的な検証エラーが返され、APIの応答が有効になるまでフォームページにとどまるようにします。私はモデルにコードを入れようとしましたが、ちょうどundefined method 'test_api_responds_correctly'エラーが発生します。

ご意見やご提案があれば助かります。ありがとう!

答えて

1

あなたがそのようなカスタムvalidation methodあなたのグループのモデル上に作成する必要があります。

validates :meetup_apikey, :meetup_urlname, presence: true 
validate :api_key_valid? 

def api_key_valid? 
    url = "https://api.meetup.com/2/events?key=#{meetup_apikey}&sign=true&photo-host=public&group_urlname=#{meetup_urlname}" 
    if !HTTParty.get(dataurl).success? 
    errors.add(:meetup_apikey, "needs to be valid") 
    end 
end 

meetup_apikeyせずにグループを作成しようと試みた後とmeetup_urlnameはデフォルト必要な属性が存在しないバリデーションエラーにつながるとするとき、彼らはしているが無効になります検証では、meetup_apikeyのエラーが表示されます。

+0

@Sergey Moiseevありがとう、私はあなたのコメントに続き、それは働いた。 APIコールのカスタム検証メソッドを書くことができず、実際には最近、httparty gem(昨日)が見つかりました。フォームの検証が完全に行われ、フォームが更新され、APIレスポンスが無効な場合は ':meetup_apikey'フィールドに検証エラーが表示されます。 – teresa

+0

ようこそ!時々、2007年からRailsを使用した後も、私はguide.rubyonrails.orgをクロールして、何かを見逃していないことを確認しています:) –

関連する問題