我的Rails应用程序中有这个下拉列表:
<%= select_tag(:report_id, options_for_select([["Summary1", 7], ["Summary2", 6]])) %>
用户从上面的下拉列表中选择一个值,然后单击下面显示的按钮以生成PDF:
<%= link_to 'Generate', pdf_path(format: :pdf, report: :report_id), class: 'btn btn-primary' %>
这是我的控制器函数,当单击上面的按钮时会被调用:
def show
init_report_data
respond_to do |format, report|
format.html
format.pdf do
puts "***************** report id" + report.to_s + "*************************"
case report
when 7
report_name = 'summary1'
when 6
report_name = 'summary2'
end
render pdf: "Forecast Report",
template: "forecast/" + report_name + ".html.erb",
disposition: "attachment",
:page_width => '18in',
:page_height => '15in'
end
end
end
控制器函数被很好地调用,但是参数“ report”的值在上述控制器函数内部变为空。
我在这里做错了什么?请帮忙!
答案 0 :(得分:4)
问题是您在这里没有使用表格。
使用form_tag并将select_tag
保留在form_tag
内。
此外,您还必须将link_to
替换为submit
按钮。不要忘记在表单中包含以下行,以请求以pdf
格式进行响应。
<%= hidden_field_tag :format, :pdf %>
原因是link_to
标记未传递您的select_tag
值或任何其他字段值。在这种情况下,您必须使用form
,并且没有其他选择。
或当选择选项更改时,使用JavaScript替换id
中的url
。由于您正在尝试执行显示操作,因此我假设您需要在path
中传递ID。
答案 1 :(得分:-1)
<%= form_tag forecast_report_pdf_path do %>
<%= select_tag(:report_id, options_for_select([["Summary1", 7], ["Summary2", 6]])) %>
<%= hidden_field_tag :format, :pdf %>
<%= submit_tag("Generate Report") %>
<% end %>
此代码有效。非常感谢您的投入!