2015-06-17 94 views
0

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

<%= 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) %> 

当我检查/取消选中这些复选框,参数数组传递到范围变更。

例如

X O O O

当选中第一盒,所述阵列是[1]。它应该显示有一间卧室的房子。

x x x x

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

x x o o

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

x o o x

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

目前,我的范围是:

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

,只用1-3个卧室的作品。当最后一个复选框被选中时,我怎么能显示所有拥有4个或更多卧室的房屋?

回答

0

请在下面的范围内尝试。在此之前,使用'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 
+0

我改变了“with_bedroom_num_check”与“卧室”,它工作得很好!谢谢! –