【发布时间】:2020-11-03 02:01:58
【问题描述】:
我正在使用 Ruby on Rails(Rails 版本 4.2)支持旧版应用程序。
我有一个搜索功能,我在用户界面上有一个搜索框。
有一个功能已经存在。
用户可以输入一个搜索词并提交搜索,在后端代码会在7列中搜索这个“搜索词”,并且它们都属于一个表(表“Tickets " 与模型 Ticket)
7 个列名存储在数组 Ticket::SEARCH_FIELDS 中 并且搜索将是所有 SQL “like”。
所以sql语句的WHERE子句会是
Select .... FROM Tickets WHERE (column1 like '%term%' or column2 like '%term%' or ....)
所以构建这个where子句的代码如下
query = Ticket.where(
Ticket::SEARCH_FIELDS.map { |field|
ticket.arel_table[field].matches("%#{search_term}%")
}.inject(:or)
)
代码运行良好。
但是有一项新要求是在这 7 列中再添加一列,但该列不是来自同一个表,而是来自名为 Employee 的查找表。
Ticket的Model定义中已经有两个模型之间的关联,如下:
class Ticket < ActiveRecord::Base
belongs_to :employee
所以,我想在前面的 where 子句中添加另一个带有该列的 OR 子句,如下所示:
WHERE column1 like '%term%' .... OR employees.name like '%term%'
我尝试了几次,但没有任何成功。
非常感谢任何帮助
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord