Dom*_*nic 11 routes ruby-on-rails form-for link-to
我正在创建一个form_tag面板,其中包含特定于控制器操作的信息(复选框).此操作在"routes.rb"中设置如下:
resources :students do
collection do
get :send_student_report_pdf
end
end
Run Code Online (Sandbox Code Playgroud)
当我从link_to调用动作时,此设置工作正常:
<%= link_to "Download PDF Report", :action => 'send_student_report_pdf', :controller => 'students'%>
Run Code Online (Sandbox Code Playgroud)
但是,当我在a中使用它时form_tag,它一直给我这个错误:
Routing Error
No route matches "/students/send_student_report_pdf"
Run Code Online (Sandbox Code Playgroud)
form_tag我的代码在这里:
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
我试过给它的网址,路径如下:
<%= form_tag send_student_report_pdf_students_path, :method => 'get' do %>
Run Code Online (Sandbox Code Playgroud)
但它一直给我相同的Route错误(就好像在routes.rb中根本不存在该动作一样,即使它完美地使用link_to而不是form_tag submit
这是控制器中动作的代码,它基本上发回一个文件.
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
Run Code Online (Sandbox Code Playgroud)
如果你发现我在这里遗漏了什么,请帮助我.
非常感谢你,
问候,
idl*_*ers 24
:method => 'get'form_for中的部分位于url_for_options哈希中,而不是选项哈希,因此Rails会将其作为cgi params放入url中.尝试将其更改为:
form_tag url_for(:controller => 'students', :action => 'send_student_report_pdf'), :method => 'get' do ...
Run Code Online (Sandbox Code Playgroud)
您无法使用指定路线的原因是您没有在路线中命名.如果您在路线中命名并在form_tag中使用指定路线,则无需使用url_for ...
resources :students do
collection do
get :send_student_report_pdf, :as => :send_student_report_pdf
end
end
Run Code Online (Sandbox Code Playgroud)
您可以通过运行检查您的路线是否符合您的预期 rake routes
| 归档时间: |
|
| 查看次数: |
20834 次 |
| 最近记录: |