我有这两个输入:
<%= search_form_for @search, url: search_path, method: :post do |f| %> <%= f.text_field :thing_false %> <%= f.text_field :thing_null %> <% end %>
当它们都被设置为"t"时,我执行了这个查询:
SQL: SELECT "stuffs".* FROM "stuffs" WHERE (("stuffs"."thing" = 'f' AND "stuffs"."thing" IS NULL))
我怎么做到这样我才能执行此操作?
SQL: SELECT "stuffs".* FROM "stuffs" WHERE (("stuffs"."thing" = 'f' OR "stuffs"."thing" IS NULL))
ransack文档并没有真正解决这个问题.这是我能找到的最接近的例子:
>> User.search(:first_name_or_last_name_cont => "Rya").result.to_sql => SELECT "users".* FROM "users" WHERE ("users"."first_name" LIKE '%Rya%' OR "users"."last_name" LIKE '%Rya%')
cschroed.. 6
如果您不希望用户必须选择"任何"选项,您可以通过在控制器中添加类似这样的内容来使搜索始终使用"OR":
@search = User.search(params[:q]) @search.combinator = "or" @users = @search.result
您还可以创建不同的搜索字段分组,并在分组中指定适当的组合.控制器可以有类似的东西:
@search = User.search(params[:q]) (0..1).each do |index| @search.build_grouping unless @search.groupings[index] @search.groupings[index].combinator = "or" end @users = @search.result
并且视图可能具有以下内容:
<%= search_form_for @search do |f| %> <% @search.groupings.each.with_index do |grouping,index| %> <%= f.grouping_fields grouping do |g| %> <% if index == 0 %> <%#= fields for first grouping here %> <% end %> <% if index == 1 %> <%#= fields for second grouping here %> <% end %> <% end %> <% end %> <%= f.submit "Search" %> <% end %>
该RansackDemo页面与不同的搜索选项来玩耍的好地方.有一个简单模式和一个高级模式.该源代码可以在GitHub和那里的景色给出了如何在分组和条件,把一些指示.
RailsCast 370中还提供了其他信息.
如果您不希望用户必须选择"任何"选项,您可以通过在控制器中添加类似这样的内容来使搜索始终使用"OR":
@search = User.search(params[:q]) @search.combinator = "or" @users = @search.result
您还可以创建不同的搜索字段分组,并在分组中指定适当的组合.控制器可以有类似的东西:
@search = User.search(params[:q]) (0..1).each do |index| @search.build_grouping unless @search.groupings[index] @search.groupings[index].combinator = "or" end @users = @search.result
并且视图可能具有以下内容:
<%= search_form_for @search do |f| %> <% @search.groupings.each.with_index do |grouping,index| %> <%= f.grouping_fields grouping do |g| %> <% if index == 0 %> <%#= fields for first grouping here %> <% end %> <% if index == 1 %> <%#= fields for second grouping here %> <% end %> <% end %> <% end %> <%= f.submit "Search" %> <% end %>
该RansackDemo页面与不同的搜索选项来玩耍的好地方.有一个简单模式和一个高级模式.该源代码可以在GitHub和那里的景色给出了如何在分组和条件,把一些指示.
RailsCast 370中还提供了其他信息.