/ / Comment passer un appel AJAX en utilisant Rails sur une action autre que Create or Destroy - jquery, sql, ruby-on-rails, ruby, ajax

Comment passer un appel AJAX à l'aide de Rails sur une action autre que Créer ou Détruire

Je veux créer un appel AJAX sur une action, disons "appelez-le vu, pour qu'un champ de ma base de données soit mis à jour en un clic. Il s'agit d'une question complémentaire à une réponse précédente que j'ai reçue hier, alors soyez indulgent car je suis plutôt inexpérimenté.

<%= button_to "Click me!", :action => "some_action", :remote => true %>
Which will send an AJAX request back to the server, in which you need to handle in your controller

def some_actoin
// Update your database here
respond_to do |format|
format.js { render "somepartial" }
end
end

Est-ce que cette réponse signifie essentiellement que je dois créer un itinéraire associé à la def some_action? Si oui, quel format cette route doit-elle prendre?

Je ne veux pas que l'utilisateur s'éloigne de la page, je veux simplement mettre à jour une div sur la page actuelle.

Réponses:

1 pour la réponse № 1

Vous avez pris un bon départ. Lorsque ce bouton est cliqué sur rails / le serveur enverra une requête HTTP à ce contrôleur / some_action. Il frappera cette méthode d'action où vous devez enregistrer dans la base de données. De là, il répondra avec javascript (d'où le format.js). Le fichier javascript avec lequel il répond (en supposant que vous utilisez jquery et non un prototype) sera appelé some_action.js.erb. Dans ce fichier, vous placez tous vos appels de fonction jquery, etc. que vous souhaitez effectuer une fois que la demande ajax est revenue.

MODIFIER:

Pour clarifier davantage les itinéraires. Vous devez pouvoir accéder à controller / some_action comme d'habitude. Cela signifie qu'il doit y avoir un itinéraire défini:

match "controller/some_action" => "controller#some_action"

mais vous n'avez pas besoin de faire quoi que ce soit de plus pour dire aux rails que c'est un itinéraire distant.


1 pour la réponse № 2

Essentiellement, oui, vous devrez ajouter la route au fichier routes.rb.

Donc, si votre contrôleur s'appelle posts_controller et que vous souhaitez marquer un message spécifique comme vu:

map.resources :posts, :member => {:seen => :post}

Cela ajoutera un itinéraire vers / posts / 1 / vu (où "1" est l'identifiant du post sur lequel effectuer l'action vue)