Rails ActiveRecord where或clause

bca*_*man 7 sql activerecord ruby-on-rails where

我正在寻找一个ActiveRecord查询,这就是我在下面的内容.不幸的是你不能像这样使用OR.什么是最好的执行方式? category_ids是一个整数数组.

.where(:"categories.id" => category_ids).or.where(:"category_relationships.category_id" => category_ids)
Run Code Online (Sandbox Code Playgroud)

Pau*_*ess 15

一种方法是恢复原始sql ...

YourModel.where("categories.id IN ? OR category_relationships.category_id IN ?", category_ids, category_ids)
Run Code Online (Sandbox Code Playgroud)


pdo*_*obb 7

保持SQL不受它影响并使用ARel,如下所示:

.where(Category.arel_table[:id].in(category_ids).
  or(CategoryRelationship.arel_table[:category_id].in(category_ids))
Run Code Online (Sandbox Code Playgroud)

  • 虽然抽象出SQL很有趣而且很简洁,但这样做很难看到任何好处.我认为阅读起来要困难得多.如果你在构建时很难编译Ruby,那么你可能会遇到错误,但是你的RSpec测试也会捕获这些错误.你确实写了测试,对吧? (4认同)
  • 对于想要应用KISS原则的人来说,ARel是完美的反模式示例. (2认同)