2010-09-08 2 views
0

J'ai un formulaire dans un fichier .erb, où l'utilisateur peut entrer des informations. Ensuite, je veux faire un POST à ​​une URL différente (disons www.3rdparty.com/api.php?f=add_entry), qui répondra avec 0 ou 1, pour le succès ou l'échec. Quel est le bon chemin à parcourir, surtout si je veux rester sur la page avec le formulaire, puis afficher un dialogue en fonction de la réponse? Je n'ai aucune expérience dans Ruby on Rails, donc je ne suis même pas sûr si c'est possible, ou si je devrais ajouter des fonctionnalités au contrôleur. Ainsi, je voudrais vraiment l'apprécier si vous pouvez fournir des détails débutant :)Comment faire un POST à ​​un tiers et obtenir le résultat avec Ruby on Rails?

Merci, Irene

Répondre

5
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) 

Voir:

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 
+0

Merci pour cela. Est-il possible de décrire brièvement une bonne façon d'ajouter une telle fonctionnalité? Je veux dire, quels fichiers dois-je changer - juste le contrôleur de ma vue de formulaire ou dois-je faire un nouveau contrôleur par exemple ..? – phi

+0

Bonjour Irene. J'ai ajouté un exemple. – mark

+0

Je sais que ce genre de commentaires est déconseillé ici, mais votre réponse a été très utile - merci beaucoup. – phi

Questions connexes