Rails 在搜索中组合多列

Jam*_*mes 2 ruby search ruby-on-rails

在我的应用程序中,我有一个包含三列first_namemiddle_name和的客户模型last_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
Run Code Online (Sandbox Code Playgroud)

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

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

ill*_*ist 5

您可以field在数据库查询中连接您的s

更新:

.where("concat_ws(' ' , first_name, middle_name, last_name) LIKE ?", "%#{search}%")
Run Code Online (Sandbox Code Playgroud)

这应该适用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}%")
Run Code Online (Sandbox Code Playgroud)