rails link_to ruby-on-rails link-to

Ruby on Rails link_to con el método put



rails link_to class (2)

Soy nuevo en Rails, y estoy tratando de usar el enlace para crear un enlace que emita una solicitud PUT en lugar de una solicitud GET. Específicamente, estoy tratando de crear un enlace que active la cuenta de un usuario en mi aplicación desde el panel de administración. Estoy usando Rails 3.0.5.

El archivo de mis rutas.rb tiene:

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

Mi vista tiene:

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

Sin embargo, esto genera la URL (por ejemplo) /admin/users/7/activate?method=put <a href="/admin/users/7/activate?method=put">Activate</a> /admin/users/7/activate?method=put con el código fuente <a href="/admin/users/7/activate?method=put">Activate</a> .

Me gustaría generar, en cambio, <a href = "/admin/users/7/activate" data-method="put">Activate</a>

Me doy cuenta de que podría usar button_to, pero he estado luchando con este problema por un tiempo y estoy confundido sobre por qué veo este comportamiento, cuando otros tutoriales dicen que lo que estoy haciendo debería ser válido. ¿Cómo puedo crear un link_to helper con el comportamiento que quiero?


link_to piensa que :method => :put es parte del hash de ruta. Tienes que decirlo de otra manera. Envuelve tu camino entre paréntesis.

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

Ahora link_to reconocerá :method => :put como una opción, no parte de la ruta del enlace.

Como nota al margen, debe intentar usar ayudantes de ruta en lugar de hashes de ruta siempre que sea posible. Mantiene las cosas bonitas y ordenadas, y evita situaciones delicadas como esta.


Actualizado : el ayudante link_to realizará un GET a menos que se especifique un método.

Es mejor especificar el tipo exacto de solicitud, en lugar de match en su archivo de rutas. ¿Qué hay de reemplazar match por put en rutas como:

put ''/admin/users/:id/activate'' => ''admins#activate_user'', :as => ''activate_user'' link_to ''Activate'', activate_user_path(user.id), method: :put

El método de activate_user debe residir en el controlador de admins . La docs tiene más información en link_to helper.