ruby-on-rails - Rails 在搜索中组合多个列

标签 ruby-on-rails ruby search

在我的应用程序中,我有一个包含三列的客户模型,first_namemiddle_namelast_name。我在执行搜索的模型中有一个方法:

class Customer < ActiveRecord::Base
  belongs_to :user

  def self.search(search, user)
    if search
      .where('first_name LIKE ? OR middle_name LIKE ? OR last_name LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%")
      .where(user: user)
    else
      where(user: user)
    end
  end

end

此搜索功能的问题在于它一次只允许按三列之一进行搜索。

例如,客户的名字是“foo”,中间名是“bar”,姓氏是“baz”。单独搜索“foo”、“bar”或“baz”会返回结果,但“foo bar”或“bar baz”不会。 我允许在所有三列中进行搜索的最佳方式是什么?

最佳答案

您可以在数据库查询中连接您的字段

更新:

.where("concat_ws(' ' , first_name, middle_name, last_name) LIKE ?", "%#{search}%")

这应该适用于 foofoo barfoo bar baz 但不是 foo baz

如果你也想支持foo baz

.where("first_name LIKE ? OR middle_name LIKE ?"\
       " OR last_name LIKE ? OR concat_ws(' ' , first_name, middle_name, last_name) LIKE ?"\
       " OR concat_ws(' ' , first_name, last_name) LIKE ?", 
       "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%")

关于ruby-on-rails - Rails 在搜索中组合多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36586372/

相关文章:

ruby-on-rails - 带有 image_tag 的 ActionMailer 中的 Rails 3.1 Assets

ruby - Puppet:迭代模板中的 hiera_hash

Rubykoans about_hashes.rb

vba - 使用 VBA 识别 Excel 字符串中的产品代码

java - 单链表最大键搜索

mysql - 连接两个模型的范围在 Rails 3.1 中不起作用

javascript - 如何在动态生成的 Rails 表上创建 JS 函数

ruby-on-rails - 如何为在我的站点上注册的应用程序生成客户端 key 和 secret 以及如何使用 OAuth 来实现提供程序

ruby - 带有删除表的 rake db :migrate updating schema. rb

algorithm - 二进制搜索以找到高于给定值的最小值