Rails根据多个复选框值进行搜索

时间:2017-01-23 06:41:20

标签: sql ruby-on-rails checkbox

我很难根据多个复选框值进行搜索,例如我有一个post表,其中人员按地点发布:

表格中的复选框列表:

 #=> Form method get
<%= check_box_tag("post_location", "London") %>
<%= check_box_tag("post_location", "Azle") %>
<%= check_box_tag("post_location", "Azure") %>
<%= check_box_tag("post_location", "Arma") %>

控制器:

@posts= Post.where(["post_location LIKE ? ", "%#{params[:post_location]}%"]).where(["post_title LIKE ? ", "%#{params[:post_title]}%"])

但始终根据最后一个复选框显示结果。

如何根据所有复选框值显示所有结果?

由于

4 个答案:

答案 0 :(得分:1)

我不知道你已经解决了这个问题,或者直到现在你都在麻烦,无论如何,我正在为未来的SO用户帮助写一个答案。

在如下视图文件中:

<%= check_box_tag("post_location[]", "London") %> London                                            
<%= check_box_tag("post_location[]", "Azle") %> Azle                                            
<%= check_box_tag("post_location[]", "Azure") %> Azure                                            
<%= check_box_tag("post_location[]", "Arma") %> Arma  

如果选中了所有复选框,则

"post_locations"=>["London","Azle","Azure","Arma"]

现在在控制器上使用如下所示的分页参数:

if params[:search] #=> if you use inside search form
   @posts = Post.where('true').paginate(page: params[:page], per_page: 10)
   @posts = @posts.where("post_title LIKE ? ", "%#{params[:search]}%") unless params[:search].blank?
   @posts = @posts.where(post_location: params[:post_location]) unless params[:post_location].blank?
else
  @posts = Post.paginate(page: params[:page], per_page: 10)
end

post_title上,您可以使用post_title或其他任何内容。

希望有所帮助

答案 1 :(得分:0)

这是因为您使用相同的复选框名称,因此复选框的值会被覆盖,您需要在数组中获取checkbox值。因此,您可以使用multiple: true。数据进入数组后,您可以在表中匹配

答案 2 :(得分:0)

您只需要添加名称的数组。 这是它的代码

<%= check_box_tag "post_location[]", "London") %>
<%= check_box_tag "post_location[]", "Azle") %>
<%= check_box_tag "post_location[]", "Azure") %>
<%= check_box_tag "post_location[]", "Arma") %>

答案 3 :(得分:0)

<%= check_box_tag("post_location", "London") %>
<%= check_box_tag("post_location", "Azle") %>
<%= check_box_tag("post_location", "Azure") %>
<%= check_box_tag("post_location", "Arma") %>

上面帮助者的标准HTML是:

<input id="post_location" name="post_location" type="checkbox" value="London" />    
<input id="post_location" name="post_location" type="checkbox" value="Azle" />    
<input id="post_location" name="post_location" type="checkbox" value="Azure" />
<input id="post_location" name="post_location" type="checkbox" value="Azure" />

这里名称相同,因此它会给出最后一个复选框的结果。

您可以按照@Rankit Ranjan

的建议选择复选框列表
<%= check_box_tag "post_locations[]", "London") %>
<%= check_box_tag "post_locations[]", "Azle") %>
<%= check_box_tag "post_locations[]", "Azure") %>
<%= check_box_tag "post_locations[]", "Arma") %>

在控制器中执行此操作后,您将在参数

中收到它
 "post_locations"=>["London","Azle","Azure","Arma"]  ## I assume all checkboxes are selected.

然后在控制器中,查询应如下所示:

@posts= Post.where(["post_location IN (?) ", "%#{params[:post_locations]}%"]).where(["post_title LIKE ? ", "%#{params[:post_title]}%"])