gpt4 book ai didi

sql - Arel#extract方法在rails中如何使用?

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

我正在尝试使用 Arel#extract 方法。我在源代码中的 test_extract.rb 中的测试用例中看到了一个示例,但是当我尝试在我的应用程序中重现它时,我得到了未定义的方法。

table = Arel::Table.new :users
puts table[:created_at].extract('hour').to_sql
=> NoMethodError: undefined method `extract' for #<Arel::Attributes::Attribute:0x7..8>

我正在使用 pg 作为数据库。

更新:

我的目标是在 sql 中得到这个结果:

SELECT users.* FROM users WHERE EXTRACT(HOUR from users."created_at") = '1'

我想找到在等于任何一天的一个小时内创建的所有用户。这在 sql 中有效,但我想知道如何在 arel 中创建它。这是一个 example它在 arel 测试套件中的使用方式。

最佳答案

extract 是 node 的方法,你可以将它转换到任何列(例如 users[:id]),但不能转换到 Arel::Table 实例。

因此,要构造您的查询,您需要:

  • 获取 Arel::Table 实例 users = Arel::Table.new(:users) 或者如果您使用 ActiveRecord - users = User.arel_table
  • 使用 project 方法在 Arel::Table 实例上设置 SELECT 语句:users = users.project(Arel.sql('*'))
  • 使用 where 方法设置 WHERE 语句:users.where(users[:created_at].extract(:hour).eq(1))

在一个 block 中:

query = User.arel_table.
project(Arel.sql('*')).
where(users[:created_at].extract(:hour).eq(1))
users = User.find_by_sql(query)
# => "SELECT * FROM \"users\" WHERE EXTRACT(HOUR FROM \"users\".\"created_at\") = 1"

关于sql - Arel#extract方法在rails中如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711833/

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