2011-03-06 26 views
11

Bir denetleyici eylemine özgü bilgileri (onay kutuları) içeren bir form_tag paneli yapıyorum. şöyle Bu eylem "routes.rb" içinde kurulur:sorunları ile denetleyici eylemi için form_tag ile form_tag sorunları

resources :students do 
    collection do 
    get :send_student_report_pdf 
    end 
end 

Bir link_to gelen eylem çağırdığınızda mükemmel çalışır Bu kurulum: Bir kullanmış Ancak

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

form_tag, bana bu hatayı veriyor tutar:

Routing Error 
No route matches "/students/send_student_report_pdf" 

Ben form_tag kod buradadır:

<%= 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 %> 

ben o url vererek çalıştık, yol gibi:

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

Ama eylem routes.rb içinde hiç yok sanki sürekli (bana aynı Rota hatayı vermektedir , mükemmel Burada denetleyicisi eylem kodudur yerine form_tag submit

ait link_to kullanarak çalışır halde, bu temelde bir dosya geri gönderir.

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 

Burada bir şey kaçırdığımı görürseniz, lütfen bana yardımcı olun.

Çok

Saygılarımızla,

senin form_for içinde :method => 'get' kısım url_for_options karma içindedir

cevap

24

değil, seçenekler karma teşekkür ederiz, bu yüzden cgi yerine params olarak Raylar url üzerine koyarak edilecektir. Bu değiştirmeyi deneyin: Eğer güzergah içinde adını vermedi çünkü adlandırılmış rotayı kullanamazsınız

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

nedenidir. Eğer güzergah bunu adlandırabilir ve form_tag adlı rotayı kullanırsanız, ... url_for kullanmak gerekir

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

Sen yolları beklediğiniz gibi olup olmadığını kontrol edebilirsiniz rake routes

+0

çalıştırarak olmaz Vay, bu harika çalışıyor! Yardımınız için çok teşekkürler. "Form_tag" parametrelerini (check_box_tag açma/kapama, text_field_tag ​​değerleri gibi) denetleyicilerle paylaşma hakkında daha küçük bir sorum var. Denedim: <% = check_box_tag "first_name", params [: first_name], checked = true%>. Ama kontrolörde "param [" first_name] "değerini almayı denediğimde, hiçbir şey alamadım. Çok teşekkürler, orijinal cevabınız bana gerçekten yardımcı oldu! – Dominic

+0

Geliştirme logunuzu izleyin. Bir eyleme hangi paramlar gönderildiğini anlatarak, nasıl referans göstermeniz gerektiğini görmenize yardımcı olacaksınız: – idlefingers

+0

Cool: check_box_tag koduna değer => params [: first_name] ekleyerek çözdüm. Şimdi params [: first_name ] kontrolör eyleminde görünür.Yardımınız için teşekkürler. – Dominic