2010-08-17 9 views
7

¿cuál es el encantamiento adecuado para que esto realmente se publique de forma asíncrona?form_tag remoto en rails3 sin una ruta con nombre

form_tag :controller => :magic, :action => :search, :method => post, :remote => true do 

method = post y remota = true acaba de obtener aplastado en el final de la URL en lugar de lo que es en realidad un puesto de ajax.

Respuesta

15

La única manera que he encontrado para hacerlo es envolver los parámetros url en el método url_for.

form_tag url_for(:action => :create, :id => @artist.id), :remote => true do 

Sin embargo, si necesita el pase el parámetro method que pueda necesitar para envolver eso y el mando a distancia entre paréntesis.

0

creo que es necesario utilizar form_remote_tag lugar: http método

form_remote_tag(:url => { :controller => :magic, :action => :search }) do 

El valor por defecto es posterior.

Si desea pasar parámetros adicionales en un form_tag que necesita para hacer de ellos un hash separado de los parámetros de URL, así:

form_tag { :controller => :magic, :action => :search }, { :method => post, :remote => true } do 
+0

La respuesta correcta es separar los dos parámetros hash, pero en Rails 3 funciona con 'form_tag' y el parámetro': remote => true'. Rails 3 pretende ser discreto con el javascript generado, y la lógica para enviarlo como solicitud ajax se encuentra ahora en el lado del cliente, con el controlador de Javascript de su elección. Consulte http://railscasts.com/episodes/205-unobtrusive-javascript – Chubas

9

Esto es lo que necesita:

form_tag({ :controller => :magic, :action => :search, :method => post }, { :remote => true }) do .... 

Su clase de un mal diseño, pero los rieles form_tag métodos requieren dos hash - el hash de opciones url_for, y las opciones de hash regular. Esto ha generado mucha confusión para muchos programadores de Rails. Si no agrega los límites del hash delineado, todas las opciones se pasan a url_for(), arruinando el :remote => true.

Esto agregará data-remote="true" a su formulario (para ser utilizado con JavaScript no intrusivo, como han mencionado otros). A partir de ahí, debe crear el AJAX apropiado para el enlace para hacer la solicitud.

Aunque en realidad debería usar una ruta con nombre como magic_search_path en lugar de los parámetros de controlador/acción.

+1

FYI, puede ver las dos opciones de hash en el prototipo del método form_tag: http://railsapi.com/doc/rails-v3.0.7/classes/ ActionView/Helpers/FormTagHelper.html # M006397. – adamlamar