使用Ransack搜索部分full_name,其中first_name和last_name是数据库列

时间:2016-11-03 19:09:02

标签: ruby-on-rails postgresql rubygems ruby-on-rails-5 ransack

如果您的数据库中有两列first_namelast_name,那么Ransack wiki中给出的5个示例中的任何一个实际上都不会使用单个输入字段对全名提供正确的全面搜索

user.rb我有:

ransacker :full_name do |parent|
  Arel::Nodes::InfixOperation.new('||',
    Arel::Nodes::InfixOperation.new('||',
      parent.table[:first_name], Arel::Nodes.build_quoted(' ')
    ),
    parent.table[:last_name]
  )
end

搜索表格如下:

= f.search_field :full_name_cont

在数据库中,用户的 first_name: Benjamin last_name: Zobrist

示例1(正常):如果您搜索Benjamin Z,代码段将按预期提取记录

示例2(无效):如果您搜索Ben Zobrist,则不会提取记录。

如何让示例2工作?

1 个答案:

答案 0 :(得分:0)

好像您正在寻找通过多列模糊匹配的全文搜索。我不确定是否可以轻松解决这个问题。

您可以使用另一个(计算的)列,其中包含全名值,可以像您一样使用数据库的全文功能进行搜索。您还可以使用SQL视图并对其执行搜索。如果即使没有产生结果,你也可能不得不采用像Elasticsearch,Solr这样的全面搜索解决方案......