我有一个Users
表,其中name
字段包含用户的全名。
我写了一个搜索功能,应该允许用他们的名字或姓氏来查找用户,但它只返回名字的结果。
例如,如果我有一位用户:user.name = 'John Smith'
,如果我输入' John'我得到了记录,但如果我进入史密斯'我没有结果。这是我的搜索代码:
name_users = User.where('name ILIKE ?', params["search_text"] + '%').all
如何允许按姓氏搜索?
答案 0 :(得分:2)
试试这个:
name_users = User.where('name ILIKE ?', "%#{params["search_text"]}%")
答案 1 :(得分:2)
LIKE
和ILIKE
进行模式匹配,最后使用%
,您只匹配字符串开头的字词,因此您可以匹配仅限名字。由于姓氏在字符串前面有字符,因此不匹配。 Postgres docs:
LIKE模式匹配始终覆盖整个字符串。为了匹配字符串中任何位置的模式,模式必须以百分号开头和结尾。
您应该在查询开头添加%
来匹配开头和结尾:
name_users = User.where('name ILIKE ?', "%#{params["search_text"]}%")
答案 2 :(得分:1)
您可以充分利用SQL。因此,您可以在搜索的文本之前添加另一个%
,以指示您要在列中的任何位置搜索字符串匹配。
query = "%#{params['name']}%"
User.where('name ILIKE ?', query)
您不需要all