ruby - 使用 || 为变量赋值 Ruby中带有if条件的运算符
问题描述
我正在尝试为搜索查询编写逻辑。有许多具有不同参数的不同条件。从表单发送的一个参数是code
. code
所以在两个不同的表中有值:competitions
和responses
。我需要先检查表中的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])
. 如果该值为[]
,则它不评估第二个条件。我应该做哪些更改才能使上述代码按照上述要求工作?
解决方案
competitions.where(code: params[:code])
返回一个Relation
始终真实的对象。
幸运的是,它实现了#presence
方法,如果它不为空则返回值,或者nil
. 所以,这应该工作:
competitions.where(code: params[:code]).presence || ...
推荐阅读
- python - 如何将 json 传递给 render_to_response
- python - 如何解决 Python OSError:[Errno 22] Linux 上的无效参数
- android - 广告:广告加载失败:3
- javascript - 如何使范围滑块的左侧与滑块右侧的颜色不同?
- dart - 错误:参数类型'(文件)→未来
'不能分配给参数类型'(动态)→FutureOr ' - ftp - VScode:如何设置本地编辑和 ftp 部署
- reactjs - htaccess 通过 URL 访问不同的子文件夹
- excel - 循环显示多条记录的消息框
- node.js - 在 Mac OS 上使用 WebRTC 和 Electron 进行屏幕共享和视频/音频通话
- java - Spring Boot 应用程序卡在:Initializing Spring DispatcherServlet 'dispatcherServlet'