使用 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
我有 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