1

indexのクラスの1つのページ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ファイルとしてエクスポートするメソッドもあります。exportビューはヘルパーメソッドの内容をレンダリングし、ここのメソッドから渡される変数@itemsをとして渡しItem.activeます。

私が欲しいのexport_filterは、テーブル内のすべてのエントリをエクスポートする代わりにItem、フィルタリングされたエントリだけをエクスポートする別のメソッドを用意することです。つまり、フィルターフォームのこれらのフォームパラメーターをexport_filterメソッドで使用できるようにし、それらを使用してビューとヘルパーに渡したいと思います。どうすればよいですか?

4

1 に答える 1

0

これは多くの場合、フォーマット(この場合はhtmlまたはcsv)を使用する単一のindex方法で処理されます。フィルタリングは、リストの別のスコープです。レンダリングは、メソッド内のブロックによって処理されます。たとえば、次のようになります。

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 に答える