Ruby-on-rails 带有成员获取路由的控制器操作的 form_tag 问题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5212437/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
problems with form_tag for controller action with members-get route
提问by Dominic
I'm making a form_tag panel that contains information (checkboxes) specific to a controller action. This action is set up in "routes.rb" as follows:
我正在制作一个 form_tag 面板,其中包含特定于控制器操作的信息(复选框)。这个动作在“routes.rb”中设置如下:
resources :students do
collection do
get :send_student_report_pdf
end
end
This setup worksperfectly when I call the action from a link_to:
这种设置工作完美,当我打电话从的link_to的操作:
<%= link_to "Download PDF Report", :action => 'send_student_report_pdf', :controller => 'students'%>
However when I used it in a form_tag, it keeps giving me this error:
但是,当我在 a 中使用它时form_tag,它不断给我这个错误:
Routing Error
No route matches "/students/send_student_report_pdf"
The form_tagcode I have is here:
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 %>
I have tried giving it the url, path like:
我试过给它网址,路径如下:
<%= form_tag send_student_report_pdf_students_path, :method => 'get' do %>
But it has been consistently giving me the same Route error (as if the action doesn't exist at all in routes.rb, even though it works perfectly using link_toinstead of form_tag submit
但它一直给我同样的路由错误(好像这个动作在 routes.rb 中根本不存在,即使它使用link_to而不是form_tag submit
Here is the code for the action in the controller, it basically sends back a file.
这是控制器中动作的代码,它基本上发回一个文件。
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
If you see that I'm missing something here, please help me.
如果您发现我在这里遗漏了一些东西,请帮助我。
Thank you very much,
非常感谢,
Regards,
问候,
回答by idlefingers
The :method => 'get'part in your form_for is in the url_for_options hash, not the options hash, so Rails will be putting it onto the url as cgi params instead. Try changing it to this:
:method => 'get'form_for 中的部分位于 url_for_options 散列中,而不是选项散列中,因此 Rails 会将其作为 cgi 参数放到 url 中。尝试将其更改为:
form_tag url_for(:controller => 'students', :action => 'send_student_report_pdf'), :method => 'get' do ...
The reason you can't use the named route is because you didn't name it in your routes. If you name it in your routes and use the named route in your form_tag, you won't need to use url_for...
你不能使用命名路由的原因是你没有在你的路由中命名它。如果您在路由中命名并在 form_tag 中使用命名路由,则不需要使用 url_for...
resources :students do
collection do
get :send_student_report_pdf, :as => :send_student_report_pdf
end
end
You can check whether your routes are as you expect by running rake routes
您可以通过运行来检查您的路线是否符合您的预期 rake routes

