Rails - 在另一个控制器中使用过滤器参数

时间:2013-03-22 18:45:14

标签: ruby-on-rails model-view-controller filter

在我index的某个类item的{​​{1}}页面上,我有一个过滤数据库中条目的表单。您可以按item所有字段进行过滤,并且所有元素都已表示,因此代码如下:

<%= form_tag(url_for({ :controller => :item, :action => :filter }), :id => 'filter_form') do %>
  <li>
    <% Category.active.each do |category| %>
      <% check_box_tag "categories[]", category.id, checked?(:categories, category.id) %>
      <%= category.name %>
    </li>
    ... 
<% end %>

filter方法中的控制器使用此处生成的查询过滤Item中的所有条目:

@items = Item.includes(:category, ...)
             .joins(:item)
             .where(:category => params[:categories]
             ...

依旧过滤器中的所有字段。

我在同一个控制器中也有一个export方法,它将所有条目导出为CSV文件。视图呈现辅助方法中的内容,并将export方法传递的变量@items作为Item.active传递。

我想要的是使用另一种方法export_filter,而不是导出Item表中的所有条目,只导出已过滤的条目。换句话说,我想在我的export_filter方法中获取我的过滤器表单的这些表单参数,并使用它们传递给视图和帮助器。我该怎么做?

1 个答案:

答案 0 :(得分:0)

这通常由使用格式的单个index方法处理(在您的情况下为html或csv)。过滤只是列表中的另一个范围 - 渲染由方法中的块处理,如:

respond_to do |format|
  format.html
  format.csv { render text: @products.to_csv }
end

像往常一样--Railscasts已经涵盖了这一点并且是一个很好的资源:

http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicast

要设置格式 - 您可以执行另一个按钮(并查看按钮的值)或其他有助于选择格式的输入。