rails select_tag 没有 form_tag
rails select_tag without form_tag
我有一个视图显示 link 报告的按钮,我希望用户能够在其中 select 报告的排序列。
select:
<%= select_tag 'select_sort_order', "<option>fleet_num</option><option>rego</option>".html_safe %>
然后 link:
<%= 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
传递给控制器的方向吗? (如果可能的话)
谢谢
controller:(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
您的 PDF link 将无法从 <select>
下拉菜单中访问。这不是 link 在 HTML 中的工作方式。
据我所知你只有两个选择。
将 <select>
标签和 link 包装在 <form>
标签中并将 link 切换为按钮(您仍然可以设置样式如果你想看起来像 CSS 中的 link,如果是这样,请使用 <button>
标签而不是 <input type="submit">
标签)。
使用 javascript 从下拉列表中获取值并将其附加到 link 标记,如下所示:?select_sort_order=...
.
要实现此功能,您需要 form_tag,然后是 submit_tag(而不是link).
另一种方法是创建两个 link 显式传递 select_sort_order,隐藏其中一个,然后根据 select 的值切换显示每个(使用onchange 事件)。这种方法不需要表格并且会起作用。
我会选择第一个选项,因为它更干净。
在您看来
<%= 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();
});
我有一个视图显示 link 报告的按钮,我希望用户能够在其中 select 报告的排序列。
select:
<%= select_tag 'select_sort_order', "<option>fleet_num</option><option>rego</option>".html_safe %>
然后 link:
<%= 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
传递给控制器的方向吗? (如果可能的话)
谢谢
controller:(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
您的 PDF link 将无法从 <select>
下拉菜单中访问。这不是 link 在 HTML 中的工作方式。
据我所知你只有两个选择。
将
<select>
标签和 link 包装在<form>
标签中并将 link 切换为按钮(您仍然可以设置样式如果你想看起来像 CSS 中的 link,如果是这样,请使用<button>
标签而不是<input type="submit">
标签)。使用 javascript 从下拉列表中获取值并将其附加到 link 标记,如下所示:
?select_sort_order=...
.
要实现此功能,您需要 form_tag,然后是 submit_tag(而不是link).
另一种方法是创建两个 link 显式传递 select_sort_order,隐藏其中一个,然后根据 select 的值切换显示每个(使用onchange 事件)。这种方法不需要表格并且会起作用。
我会选择第一个选项,因为它更干净。
在您看来
<%= 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();
});