Как сделать POST третьей стороне и получить результат обратно с помощью Ruby on Rails? - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть форма в файле .erb, где пользователь может ввести некоторую информацию.Затем я хочу сделать POST для другого URL (скажем, www.3rdparty.com/api.php?f=add_entry), который ответит 0 или 1, в случае успеха или неудачи.Какой правильный путь, особенно если я хочу остаться на странице с формой, а затем показать диалог в соответствии с ответом?У меня нет опыта работы с Ruby on Rails, поэтому я даже не уверен, возможно ли это, или мне следует добавить функциональность в контроллер.Таким образом, я был бы очень признателен, если бы вы предоставили подробности для начинающих:)

Спасибо, Ирэн

1 Ответ

5 голосов
/ 08 сентября 2010
require 'net/http'
url = URI.parse('http://www.3rdparty.com/api.php?f=add_entry')
args = {'arg1' => 'data' }
response = Net::HTTP.post_form(url, args)

См .:

http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

# routes.rb
map.resources :books, :member => {:status => :get}#status route member optional - see below

# book_controller.rb
def new
  @book = Book.new

# new.html.erb
form_for @book, :url => books_path do |f|
  <%= f.fields_for :title -%>
  <%= f.fields_for :isbn -%>

#book_controller.rb
def create
  @book = Book.new params[:book]
  if @book.save
    redirect_to status_book_path @book #optional
    # no need to redirect. Create a create.html.erb and it will be rendered by default

#book.rb #model
before_create :verify_isbn

private
def verify_isbn
  require 'net/http'
  url = URI.parse('http://www.3rdparty.com/api.php?f=add_entry')
  args = {:isbn => isbn }#here the latter isbn is a field of your model
  response = Net::HTTP.post_form(url, args)
  errors.add(:isbn, "That isbn is not valid") unless response.to_i == 1
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...