我一直在研究Arel(主要是因为它在ransack gem中用于高级搜索)。我看过一些指南,但我不太明白它是如何工作的。
有例如
users = Arel::Table.new(:users)
users.where(users[:name].eq('amy'))
# => SELECT * FROM users WHERE users.name = 'amy'
这将生成SQL查询,但不执行它。 我该如何使用结果? Arel应该如何编写& where(模型,视图,控制器?)
我知道这看起来有点宽泛,但我想看到的是在哪里/如何使用arel来搜索我的表格。
答案 0 :(得分:2)
Arel的一个用途是为您的模型建立条件。知道Rails本身在你做出这样的查询时会在引擎盖下使用它也很有用:
User.where(name: 'amy')
Arel将等同于:
User.where(User.arel_table[:name].eq('amy'))
显然,对于这个示例,不需要直接编写Arel,但是Arel允许在代码中组合更复杂的查询,在这些代码中,您通常需要下拉到手写SQL子句(例如使用其他运算符,如{{1 }},IN
,>
等。)
例如,要查找超过18岁的用户:
<
可以写成
User.where('age >= ?', 18)
您还可以使用Arel构建完全形成的SQL查询,然后将其传递给Active Record来执行它:
User.where(User.arel_table[:age].gteq(18))
结果将是一个哈希数组,其中键是查询中选择的字段名称。