与hansack(rails)进行OR

 LookUp77 发布于 2023-02-12 16:18

我有这两个输入:

<%= 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中还提供了其他信息.

1 个回答
  • 如果您不希望用户必须选择"任何"选项,您可以通过在控制器中添加类似这样的内容来使搜索始终使用"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中还提供了其他信息.

    2023-02-12 16:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有