我有一个视图,显示链接到报告的按钮,我希望用户能够选择报告的排序列。
选择:
<%= select_tag 'select_sort_order', "<option>fleet_num</option><option>rego</option>".html_safe %>
然后链接:
<%= link_to "PDF", current_vehicle_reports_path(format: 'pdf', select_sort_order: params[:select_sort_order]), target: "_blank" %>
目标是能够通过以下方式访问控制器中的值:
params[:select_sort_order]
据我了解,我没有从params
获得所需值的原因是缺少form_tag。有人能指出我如何将值从select_tag
传递给控制器的方向。 (如果可能的话)
由于
控制器:( if / else仅用于测试)
def current
@report = Report.new(current_user.filter_start_date, current_user.filter_end_date, current_user.vehicle_group_ids, current_user.vehicle_sub_group_ids, "Current Asset Register", false, true, "date_reported", 0, current_user.vehicle_type_ids, true )
if params[:select_sort_order] == "fleet_num"
@report.data = Vehicle.left_outer_join_vehicle_tables("sold = false #{@report.where_clause}").order(:fleet_num)
else
@report.data = Vehicle.left_outer_join_vehicle_tables("sold = false #{@report.where_clause}").order(:rego)
end
respond_to do |format|
format.pdf do
render :pdf => "#{__method__}"
end
format.xlsx
end
end
答案 0 :(得分:1)
<%= form_tag current_vehicle_reports_path, id: "report_form" do %>
<%= select_tag 'select_sort_order', "<option>fleet_num</option><option>rego</option>".html_safe %>
<%= link_to "PDF", current_vehicle_reports_path(format: 'pdf'), id: 'report_id' %>
<%end %>
在application.js或其他js文件中
$('#report_id').click(function(e) {
e.preventDefault();
$('#report_form').attr('target', '_blank').submit();
});
答案 1 :(得分:0)
您的PDF链接将无法从您的<select>
下拉列表中进行访问。这不是链接在HTML中工作的方式。
据我所知,你只有两种选择。
将<select>
标记和链接包含在<form>
标记中,并将链接切换为按钮(如果需要,您仍然可以将其设置为类似CSS中的链接,如果需要,所以请使用<button>
代码而不是<input type="submit">
代码。
使用javascript从下拉列表中获取值,并将其附加到链接标记,如下所示:?select_sort_order=...
。
答案 2 :(得分:0)
为此,您需要 form_tag ,然后需要 submit_tag (而不是链接)。
另一种方法是创建两个明确传递select_sort_order的链接,隐藏其中一个,然后根据您选择的值切换显示每个链接(使用 onchange 事件)。这种方法不需要表格,也可以使用。
我会选择第一个选项,因为它更清洁。