通过rails中的复选框过滤

时间:2016-01-31 07:30:12

标签: ruby-on-rails ruby-on-rails-4 checkbox

我在我的rails应用程序搜索中遇到了一个问题。

这是我的复选框代码:

<form action="<%= search_path %>" method="get">
  <%= check_box_tag :title, params[:title] %> Title
  <input type="submit" value="Fielter" />
</form>

此代码搜索但在网址中显示默认=on,如下所示:

http://localhost:3000/search?title=on

如何搜索ABC&amp;等标题?删除默认=on

我需要这样:

http://localhost:3000/search?title=ABC

谢谢

2 个答案:

答案 0 :(得分:2)

  

check_box_tag(name,value =&#34; 1&#34;,checked = false,options = {})

我认为默认值来自params[:title]中的check_box_tag

因为当您拥有<%= check_box_tag :title, params[:title] %>时, HTML 等效项

<input id="title" name="title" type="checkbox" value="on" /> #assumning the value of params[:title] is on

因此复选框的值始终为

尝试将其更改为

<%= check_box_tag :title %> Title

答案 1 :(得分:0)

如果没有javascript,那个特定的url模式可能很难做到,但是通过处理逻辑服务器端,你可以很容易地获得所需的结果(只有在选中复选框时搜索标题)。

只需将您的表单修改为始终将标题作为隐藏字段(因此它始终作为提交时的参数传递)以及复选框,该复选框将作为参数传递为1或0(true或false )取决于是否检查。然后,处理搜索路径中的逻辑:如果checkbox参数为true,则根据title参数进行搜索。如果复选框为false,则不要使用title参数。

var dic = [NSDate: Int]()

这将为您提供如下所示的网址格式:

<form action="<%= search_path %>" method="get">
  <%= hidden_field_tag "title", :title %>
  <%= check_box_tag :use_title %> Title
  <input type="submit" value="Fielter" />
</form>

在控制器动作中:

http://localhost:3000/search?title="ABC"&use_title="1"
or
http://localhost:3000/search?title="ABC"&use_title="0"

这应该会给你想要的行为。