2010-07-02 14 views
0

Je veux rendre un formulaire (champs et inclut un bouton de soumission) en utilisant link_to_remote - le formulaire apparaît via un appel ajax. Je voudrais que ce formulaire se comporte comme n'importe quel autre formulaire (c'est un enregistrement de base actif), rien d'extraordinaire. Après soumission, cependant, je voudrais que la page parente originale reste statique sans actualiser et, au lieu du formulaire, l'avis (votre formulaire a été soumis avec succès) à sa place.Comment utiliser link_to_remote avec un formulaire comme URL distante?

Comportement actuel, après envoi, il redirige la page entière.

Je mis la télécommande dans une méthode:

<%= do_event_remote(contact_event, event) %> 

Et voici cette méthode d'assistance:

def do_event_remote(contact, call_or_email_or_letter) 
    model_name = call_or_email_or_letter.class.name.tableize.singularize 
    link_to_remote "#{model_name.camelize}", 
        :url => send("new_contact_#{model_name}_path", 
              :contact => contact, 
              :status => 'done', 
              :"#{model_name}" => call_or_email_or_letter), 
        :update => 'remote_event'          
    end 

Merci ...

Répondre

0

Vous créez la forme que la normale, mais vous utilisez l'aide remote_form_for à la place du form_for et le remote_form_tag à la place de form_tag. Cela soumettra le formulaire via ajax.

Documenation à: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html

Mise à jour: Exemple:

Dans votre formulaire (en utilisant haml):

= remote_form_for @customer, :url => customer_path(@customer), :complete => "doSomething(request)" do |f| 
    %p 
    First Name<br> 
    = f.text_field :first_name 
    %p 
    Last Name<br> 
    = f.text_field :last_name 
    = submit_tag "Update" 

Pour vos fonctions de fondu, vous devez utiliser scriptaculous ou jquery. Scriptaculous est livré avec des rails et est actuellement la valeur par défaut. Pour cela, votre javascript serait quelque chose comme ceci:

function doSomething(request){ 
    Effect.fade('some_div'); 
} 

plus sur scriptaculous: http://wiki.github.com/madrobby/scriptaculous/

+0

ok ... donc je l'utilise encore le link_to_remote, mais dans le code HTML de _form qui utilise le form_for, par votre remplacerai Remarques? – Angela

+0

non, au lieu du formulaire_for, utilisez form_for_remote. Mais vous avez des options similaires à link_to_remote pour les options ajax. (mise à jour, etc) –

+0

Ah, et vous venez d'utiliser une vieille étiquette de soumission régulière pour soumettre le formulaire –