首页 > 解决方案 > 使用 || 为变量赋值 Ruby中带有if条件的运算符

问题描述

我正在尝试为搜索查询编写逻辑。有许多具有不同参数的不同条件。从表单发送的一个参数是code. code所以在两个不同的表中有值:competitionsresponses。我需要先检查表中的params[:code]competitions,如果不存在则检查responses表。如果它在任何一个表中都不存在,那么它应该返回nil. 我正在尝试将其写在一个if语句中。我试过的代码如下:

competitions = Competition.includes(:event, :responses)
if params[:code].present?
  competitions = (competitions.where(code: params[:code])) || 
  (competitions.joins(:responses).where(responses: { code: params[:code] }))

上面的代码只检查competitions.where(code: params[:code]). 如果该值为[],则它不评估第二个条件。我应该做哪些更改才能使上述代码按照上述要求工作?

标签: rubyruby-on-rails-4

解决方案


competitions.where(code: params[:code])返回一个Relation始终真实的对象。

幸运的是,它实现了#presence方法,如果它不为空则返回值,或者nil. 所以,这应该工作:

competitions.where(code: params[:code]).presence || ...

推荐阅读