web-dev-qa-db-fra.com

=Ruby ON Rails link_to avec la méthode de vente

Je suis nouveau dans les rails et j'essaie d'utiliser le lien_to assistant pour créer un lien qui émet une demande de vente au lieu d'une demande d'obtention. Spécifiquement, j'essaie de créer un lien qui active le compte d'un utilisateur dans mon application à partir du panneau de l'administrateur. J'utilise Rails 3.0.5.

Mon fichier routes.rb a:

match '/admin/users/:id/activate' => 'admin#activate_user',
  :action => :activate_user, :via => :put

Mon point de vue a:

link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put

Cependant, cela génère l'URL (par exemple) /admin/users/7/activate?method=put avec le code source <a href="/admin/users/7/activate?method=put">Activate</a>.

Je voudrais générer, à la place, <a href = "/admin/users/7/activate" data-method="put">Activate</a>

Je me rends compte que je pourrais utiliser Button_to, mais je me lance avec cette question pendant un moment et je suis confus pourquoi je vois ce comportement, lorsque d'autres tutoriels disent que ce que je fais devrait être valide. Comment puis-je continuer à créer un helper link_to avec le comportement que je veux?

26
maksim

mise à jour - le link_to Helper fera une obtention à moins qu'une méthode soit spécifiée.

Sa meilleure spécification du type de demande exact, au lieu de match dans votre fichier de routes. Que diriez-vous de remplacer match par put en itinéraires comme:

put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user'

link_to 'Activate', activate_user_path(user.id), method: :put

Les activate_user La méthode devrait résider dans admins contrôleur. The docs a plus d'informations sur link_to assistant.

33
prasvin

link_to pense que :method => :put fait partie du traité de chemin. Vous devez le dire autrement. Enveloppez votre chemin entre parenthèses.

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put

Maintenant link_to reconnaîtra :method => :put En tant qu'option, ne faisant pas partie du chemin du lien.

En tant que note latérale, vous devriez essayer d'utiliser les aides d'itinéraires au lieu de trajectoire dans la mesure du possible. Garde des choses agréables et bien rangées et évite les situations nit-piquées comme celle-ci.

32
Substantial