2011-03-06 4 views
11

Estoy creando un panel form_tag que contiene información (casillas de verificación) específicas para una acción del controlador. Esta acción está configurado en "routes.rb" de la siguiente manera:problemas con form_tag para la acción del controlador con members-get route

resources :students do 
    collection do 
    get :send_student_report_pdf 
    end 
end 

Esta configuración funciona perfectamente cuando llamo a la acción de un link_to:

<%= link_to "Download PDF Report", :action => 'send_student_report_pdf', :controller => 'students'%> 

Sin embargo cuando lo usé en una form_tag, que sigue mostrándome este error:

Routing Error 
No route matches "/students/send_student_report_pdf" 

El código form_tag lo que tengo es aquí:

<%= form_tag :controller => 'students', :action => 'send_student_report_pdf', :method => 'get' do %> 
    <%= label_tag "Include columns" %> <br> 
    <%= check_box_tag "first_name", params[:first_name], checked = true %> <%= label_tag "First Name" %><br> 
    <%= submit_tag "Download PDF Report", :action => 'send_student_report_pdf', :controller => 'students'%> 
<% end %> 

He tratado dándole la url, camino como:

<%= form_tag send_student_report_pdf_students_path, :method => 'get' do %> 

Pero ha sido constantemente me está dando el mismo error de ruta (como si la acción no existe en absoluto en routes.rb , aunque funciona perfectamente con link_to en lugar de form_tag submit

Aquí está el código para la acción en el controlador, básicamente devuelve un archivo.

def send_student_report_pdf 
    @students = search_sort_and_paginate 
    puts "params[:first_name] = ", params[:first_namea] 
    send_data(generate_pdf_report(@students), :filename => "report.pdf", :type => 'application/pdf') 
end 

Si ve que me falta algo aquí, por favor ayúdeme.

Muchas gracias,

Saludos,

Respuesta

24

La parte :method => 'get' en su form_for está en el hash url_for_options, no el hash de opciones, por lo que los carriles se ponerlo en la url como CGI params lugar. Intente cambiar a esto:

form_tag url_for(:controller => 'students', :action => 'send_student_report_pdf'), :method => 'get' do ... 

La razón por la que no puede utilizar la ruta llamada es porque no se lo nombra en sus rutas. Si lo que sea en sus rutas y utiliza la ruta denominada en su form_tag, usted no tendrá que utilizar url_for ...

resources :students do 
    collection do 
    get :send_student_report_pdf, :as => :send_student_report_pdf 
    end 
end 

Puede comprobar si sus rutas son como esperas ejecutando rake routes

+0

Wow, esto funciona increíble! Muchas gracias por su ayuda. Tengo una pregunta más pequeña sobre cómo compartir los parámetros de "form_tag" (como check_box_tag on/off, text_field_tag ​​values) con los controladores. Intenté: <% = check_box_tag "first_name", params [: first_name], checked = true%>. Pero en el controlador cuando intenté obtener el valor de "params [: first_name], no obtuve nada. ¡Muchas gracias, sin embargo, su respuesta original realmente me ayudó!" – Dominic

+0

Mire su registro de desarrollo. qué params se han enviado a una acción, lo que le ayudará a ver cómo necesita referenciarlo. – idlefingers

+0

Cool. Lo descubrí agregando: value => params [: first_name] a check_box_tag. Ahora params [: first_name ] aparece en la acción del controlador. Gracias por su ayuda. – Dominic

Cuestiones relacionadas