我在Employee表的索引页面中有4个搜索字段 - id, due_date, employee_full_name, company_name
。
此处,在search_parameters
中,我正在检查是否存在搜索参数
search_parameters =
{:id => params[:id], :due_date => params[:due_date],
:employee_full_name => params[:employee_full_name]}
.select { |key,value| value.present?}
我正在搜索Employee表的列,它工作正常
@employees_search = Employee
.where(search_parameters, params[:id].to_i, params[:due_date],
params[:employee_full_name])
这里我在公司表中搜索'company_name',其中company_id
作为外键。这也很好。
@company_search = Employee
.where(company_id: Company
.where(company_name: params[:company_name]))
但我需要结合上述2个查询,以便用户可以一起搜索所有4个字段。有点像下面的代码。
@employees_search = Employee
.where(search_parameters, params[:id].to_i, params[:due_date],
params[:employee_full_name],
company_id: Company
.where(company_name: params[:company_name]))
上面的查询只给出了员工表的搜索结果,而不是组合结果。查询有什么问题?
答案 0 :(得分:0)
通过提供所有字段
,使用或查询使用活动记录查询来尝试此查询@employees_search = Employee
.where("id = ? or due_date = ? or employee_full_name = ?
or company_id in (?)", params[:id],params[:due_date],params[:employee_full_name],
Company.where('company_name = ?',params[:company_name]).pluck(:id))
使用'= ?'
语法搜索Employee表中的所有字段,当访问company_id时,可能有多个公司具有相同的名称,因此使用in (?)
语法,即使它适用于单个公司。
这将为您的所有员工提供参数的价值,同时也包括属于该公司的员工。
这可以解决您的问题。
答案 1 :(得分:0)
使用@sravan回答,我到达了以下查询,这完美地运作了。
search_parameters =
{:id => params[:id], :due_date => params[:due_date],
:employee_full_name => params[:employee_full_name],
:company_id => Company
.where('company_name = ?', params[:company_name])
.pluck(:id)}
.select { |key,value| value.present? }
@employees_search = Employee
.where(search_parameters, params[:id].to_i, params[:due_date],
params[:employee_full_name],:company_id => Company
.where('company_name = ?',params[:company])
.pluck(:id)
)