Я пытаюсь создать систему фильтрации записей с использованием областей ActiveRecord, но я застреваю в точке, где у вас есть два фильтра одной и той же модели. Я пытаюсь фильтровать продукты с 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, он фильтрует продукты с только первым параметром;
, например, если я фильтр с марками с :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
?
Он по-прежнему не работает, он передает 'brand_ids []' как единый параметр вместо массива brand_ids. Разве параметр не должен совпадать с именем области? –
Я добавил комментарий о пределе GET при отправке параметров, после более тщательного анализа настройки формы и проблемы, с которой вы сталкиваетесь. –
Ваша вторая ссылка сообщила мне, что мне нужно знать, поэтому я буду принимать ваш ответ. –