gpt4 book ai didi

ruby-on-rails - 不了解 Arel 用法(Rails)

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:13 24 4
gpt4 key购买 nike

我一直在研究 Arel(主要是因为它在 ransack gem 中用于高级搜索)。我看过一些指南,但我不太明白它是如何工作的。

例如

users = Arel::Table.new(:users)
users.where(users[:name].eq('amy'))
# => SELECT * FROM users WHERE users.name = 'amy'

这将生成一个 SQL 查询,但不会执行它。我该如何使用结果? Arel应该怎么写&在哪里(模型, View , Controller ?)

我知道它可能看起来有点宽泛,但我想要了解的是在哪里/如何使用 arel 在我的表格中进行搜索。

最佳答案

Arel 的一个用途是为您的模型构建条件。每当您进行如下查询时,了解 Rails 本身也在后台使用 Arel 也很有用:

User.where(name: 'amy')

Arel 将等同于:

User.where(User.arel_table[:name].eq('amy'))

显然,对于此示例,不需要直接编写 Arel,但 Arel 允许在代码中编写更复杂的查询,而您通常需要在这些代码中下降到手写 SQL 子句(例如使用其他运算符,如 IN , > , < 等)

例如,查找 18 岁以上的用户:

User.where('age >= ?', 18)

可以写成

User.where(User.arel_table[:age].gteq(18))

您还可以使用 Arel 构建完整的 SQL 查询,然后将其传递给 Active Record 以执行它:

table = User.arel_table
sql = table.project(:id).where(table[:name].eq('amy')).to_sql # => "SELECT id FROM \"users\" WHERE \"users\".\"name\" = 'amy'"
ActiveRecord::Base.connection.execute(sql)

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

关于ruby-on-rails - 不了解 Arel 用法(Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com