如何使用Rails中的ruby在options_for_select中选择的选项

时间:2018-11-13 06:39:47

标签: ruby-on-rails drop-down-menu controller

我的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”的值在上述控制器函数内部变为空。

我在这里做错了什么?请帮忙!

2 个答案:

答案 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 %>

此代码有效。非常感谢您的投入!