按名字,中间名和姓氏搜索用户

时间:2015-07-28 07:35:21

标签: sql ruby-on-rails postgresql activerecord

在我的Rails项目中,我有一个如下所示的表:

  create_table "people", force: :cascade do |t|
    t.string   "first_name",  limit: 255
    t.string   "last_name",   limit: 255
    t.string   "middle_name", limit: 255
    t.datetime "created_at",              null: false
    t.datetime "updated_at",              null: false
  end

我有一个通过first_name或last_name搜索的查询:

Person.where("lower(people.first_name) LIKE lower(:q) OR lower(people.last_name) LIKE lower(:q)", q: 'Melanie')

问题是:有没有办法重构此查询以通过first_name,last_name和middle_name进行搜索?我的数据库是Postgresql。

修改

当我有第一个名字的人:比尔和最后一个名字:盖茨,而且我设置了比尔盖茨'它不会搜索正确的记录。我想要获取该记录。

2 个答案:

答案 0 :(得分:0)

你做得对。只是和OR的另一个middle_name子句:

Person.where("lower(people.first_name) LIKE lower(:q) OR lower(people.last_name) LIKE lower(:q) OR lower(people.middle_name) LIKE lower(:q)", q: 'Melanie')

答案 1 :(得分:0)

这可以按预期工作:

where("lower((COALESCE(people.first_name, '') || COALESCE(people.middle_name, '') || COALESCE(people.last_name, ''))) like lower(?)", "%#{text.split.join('%')}%")