0

ActiveRecord スコープを使用してレコード フィルタリング システムを作成しようとしていますが、同じモデルの 2 つのフィルターがあるところで行き詰まっています。brand_id: 1とで製品をフィルタリングしようとしていますbrand_id:2

スコープが定義された私のProductモデルはbrand次のようになります。

class Product < ActiveRecord::Base
  belongs_to :brand

  scope :brand, lambda{|brand| where('brand_id = ?', brand )}
end

categories/showビューで製品をフィルタリングしようとしていますが、CategoriesController次のようになります。

class CategoriesController < ApplicationController
  has_scope :brand

  def show
    @category = Category.find(params[:id])
    @products_by_category = apply_scopes(Product).where(category_id: @category).load
    @brands = @category.brands
  end
end

ビューは次のcategories/showようになります。

<% @products_by_category.each do |product| %>
  <h2><%= product.name %></h2>
<% end %>

私はフィルタリングを行うためにこのフォームを使用しています:

<%= form_tag @category_path, method: get do %>
  <% @brands.each do |brand| %>
    <span class="filter_name"><%= brand.name%>:</span>
    <span> <%= check_box_tag :brand, brand.id, false,
                                     class: 'filter_check_box' %> </span>

   <% end %>
  <%=submit_tag 'filter'%>
<% end %>

問題は、check_boxes で複数のブランドを選択すると、最初のパラメーターのみで製品がフィルター処理されることです。

たとえば、and を使用してブランドでフィルタリングし:id 1:id 2フォームを送信すると、リクエスト URL は次のようにhttp://localhost:3000/categories/1?&brand=1&brand=4 なり、クエリされた配列は でのみフィルタリングされbrand=1ます。結果を両方のパラメータでフィルタリングしたいと思います。結果のURLは正しいですか、それとも次のようにする必要があります http://localhost:3000/categories/1?&brand=1,4か?

4

1 に答える 1