您可以在其中,方法在一个价值传递了这样的多列使用符号:
@usersfiltered = User.where("first_name LIKE :search_name or last_name LIKE :search_name",
search_name: "%#{params[:search_word]}%")
更新:
要搜索first_name
和last_name
相结合,你可以连接两个字段并添加另一个OR
条件。
这里的问题是不同的数据库有自己的连接风格。以下是MySQL和Postgres。
MySQL的:
@usersfiltered = User.where("first_name LIKE :search_name or last_name LIKE :search_name or concat(first_name, ' ', last_name) like :search_name",
search_name: "%#{params[:search_word].squish}%")
Postgres的:
@usersfiltered = User.where("first_name LIKE :search_name or last_name LIKE :search_name or (first_name || ' ' || last_name) like :search_name",
search_name: "%#{params[:search_word].squish}%")
我还添加了Ruby字符串函数squish,采取额外空间的照顾。
来源
2013-08-17 16:54:00
vee
试过这个,但如果我输入“bob史密斯”,它不会返回任何结果。有没有办法添加这个逻辑? – brad
@brad,请参阅更新。 – vee