我很难根据多个复选框值进行搜索,例如我有一个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]}%"])
但始终根据最后一个复选框显示结果。
如何根据所有复选框值显示所有结果?
由于
答案 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]}%"])