使用 filterrific 过滤多个复选框

Multiple checkboxes filtering using filterrific

我有 4 个使用相同范围的复选框。它用于过滤具有一定数量卧室的房子。最后一个复选框代表“4 间及更多”卧室

<%= f.check_box(:with_bedroom_num_check, {multiple: true}, '1', nil) %>
<%= f.check_box(:with_bedroom_num_check, {multiple: true}, '2', nil) %>
<%= f.check_box(:with_bedroom_num_check, {multiple: true}, '3', nil) %>
<%= f.check_box(:with_bedroom_num_check, {multiple: true}, 'more', nil) %>

当我check/uncheck这些复选框时,传递给作用域的参数数组发生变化。

例如

xooo

选中第一个框时,数组为[1]。它应该显示有一间卧室的房子。

x x x x

数组为[1,2,3,more]。它应该显示所有房屋。

xxoo

数组为[1, 2]。它应该显示有 1 间或 2 间卧室的房子。

x o x

数组为[1, more]。它应该显示有 1 个、4 个或更多卧室的房子。

目前,我的范围是:

scope :with_bedroom_num_check, lambda { |flag|
    where(bedroom:[flag])
}

它只适用于 1-3 间卧室。检查上一个复选框时,我如何显示所有房屋的4个或更多卧室?

在您的范围内尝试以下操作。在此之前,使用“4”而不是 'more' 作为最后一个复选框的值。

   ([1, 2, 3, 4] - flag).inject(all) do |x, y|
      if y == 4
        x.where.not("with_bedroom_num_check >= ?", y)
      else
        x.where.not(with_bedroom_num_check: y)
      end
    end