使用表單輸入API密鑰,我想在保存表單之前檢查API密鑰是否返回有效的響應。否則,它只會返回帶有錯誤消息的表單(如常見的驗證錯誤)。Rails:API調用的表單驗證
我測試了驗證代碼,它的工作原理,但我在控制器中。我是使用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 updated
和Invalid API key or group url name
消息。
這不是我想要的,我希望表單返回一個常見的驗證錯誤,並保留在表單頁面上,直到API響應有效。我試圖將代碼放入模型中,但我得到一個undefined method 'test_api_responds_correctly'
錯誤。
任何建議和見解都會有幫助。謝謝!
謝謝你的@Sergey Moiseev,我遵循你的評論,它的工作。我不知道你可以爲API調用編寫自定義驗證方法,而我最近才發現了httparty gem(昨天)。如果API響應無效,現在表單驗證完美地工作,刷新表單並驗證錯誤出現在':meetup_apikey'字段中。 – teresa
歡迎!即使在2007年使用Rails之後,我自己也會不時地抓取guides.rubyonrails.org,以確保我不會錯過某些東西:) –