所以,我有一个项目数据库,我正在编写一个搜索查询。我希望用户能够选择他们使用或不使用的字段,他们不需要填写所有字段。用户忽略的任何字段我不希望查询受到未选择的内容的限制。
如果用户在html表单中跳过proposal_status:
,我不希望查询通过空白数组限制搜索。如果proposal_status
是一个空白数组,如何更改我的查询以忽略params[:status]
行?
Project.where(
job_number: /#{params[:job_number]}/i,
project_name: /#{params[:project_name]}/i,
proposal_status: {:$in => params[:status] } # params[:status] == []
)
答案 0 :(得分:0)
这两个查询是等价的:
Project.where(
job_number: /#{params[:job_number]}/i,
project_name: /#{params[:project_name]}/i,
proposal_status: {:$in => params[:status] }
)
Project.where(job_number: /#{params[:job_number]}/i)
.where(project_name: /#{params[:project_name]}/i)
.where(proposal_status: {:$in => params[:status] })
如果你逐个构建查询,那么遗漏一件很容易:
q = Project.where(job_number: /#{params[:job_number]}/i)
q = q.where(project_name: /#{params[:project_name]}/i)
q = q.where(proposal_status: {:$in => params[:status] }) if(params[:status].present?)
此外,Mongoid补丁(或至少用于)某些方法到Symbol
,所以你可以说:
where(:proposal_status.in => params[:status])
# --------------------^^^
简化事情(除非他们当然不再这样做了。)