【发布时间】:2013-08-21 16:53:59
【问题描述】:
我正在尝试使用 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 %>
问题是当我在复选框中选择多个品牌时,它只过滤第一个参数的产品;
例如,如果我使用 :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 ?
【问题讨论】:
标签: ruby-on-rails ruby activerecord filtering