1

在我index的一个类的页面上item,我有一个表单可以过滤数据库中的条目。您可以按所有字段进行过滤,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 文件。视图渲染辅助方法中的内容,并将变量@items 从export此处的方法传递为Item.active.

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

4

1 回答 1

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

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

于 2013-03-22T22:31:04.463 回答