不了解Arel的使用(Rails)

时间:2018-03-18 13:55:25

标签: ruby-on-rails ruby activerecord arel

我一直在研究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来搜索我的表格。

1 个答案:

答案 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))

结果将是一个哈希数组,其中键是查询中选择的字段名称。