【问题标题】:Concatenation for search in Ruby on RailsRuby on Rails 中的连接搜索
【发布时间】:2014-10-21 05:47:11
【问题描述】:

因此,作为 Ruby on Rails 应用程序中搜索功能的一部分,我让用户可以按名字和姓氏进行搜索。但是,当我输入他们的全名时,它不会呈现任何结果。因此,如果用户名为 John Smith,我可以输入“John”或“Smith”,它会调出他,但如果我输入“John Smith”,它就无法识别。

我知道这是因为在我的搜索代码中我只启用了名字和姓氏,但没有启用用户的全名。连接名字和姓氏以解决此问题的正确方法是什么?

这是当前代码:

users = User.find_by_sql(['select *
    from users
    where first_name ilike ?
    or last_name ilike ?
    order by last_name limit ?', q, q, 100])

【问题讨论】:

  • 如果他们搜索“Smith John”,您希望发生什么?
  • 没想到...不过可能希望它显示 John Smith
  • 我可能会定义一个新方法,例如def full_name ([first_name, last_name] - ['']).compact.join(' ') end
  • @Suomi 似乎不起作用。那会按如下方式使用吗? where first_name ilike ? or last_name ilike ? or full_name ilike ?

标签: ruby-on-rails ruby search concatenation


【解决方案1】:

检查此代码,

users = User.find_by_sql(["SELECT * FROM users WHERE (coalesce(users.first_name, '') || ' ' || coalesce(users.last_name, '') ilike '%#{p.downcase}%' )"])

【讨论】:

  • 感谢 Debadatt,对您的回答稍作改动即可! users = User.find_by_sql(["select * from users where (coalesce(users.first_name, '') || ' ' || coalesce(users.last_name, '')) ilike ? order by last_name limit ?", q, 100])
【解决方案2】:

mysqlconcat 呢?

users = User.find_by_sql(["SELECT * FROM users WHERE 
                           CONCAT(first_name, ' ', last_name) LIKE ? 
                           ORDER BY last_name LIMIT ?", p, 100]
                         )

其中 p 可以是任何 JohnSmithJohn Smith

【讨论】:

  • Salil,感谢您的回答,但似乎不起作用:(
猜你喜欢
  • 2010-11-05
  • 2011-05-29
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 2014-10-20
  • 2015-09-03
  • 2017-03-25
相关资源
最近更新 更多