gpt4 book ai didi

ruby-on-rails - Rails 范围方法返回 WhereChain 而不是数组

转载 作者:行者123 更新时间:2023-12-03 15:20:56 24 4
gpt4 key购买 nike

在我的 Deal 类中,我添加了一个作用域方法:

scope :current, -> { where {|d| d.end_date > Date.today} }

它返回正确的数据,但不是返回一个我可以计数、迭代等的数组,而是返回一个 ActiveRecord::QueryMethods::WhereChain,我无法用那个。

我注意到对 Deal.current 的调用以“@scope=”开头:

Deal.current                                                                                                                   
Deal Load (1.0ms) SELECT "deals".* FROM "deals"
=> #<ActiveRecord::QueryMethods::WhereChain:0x00007fbc61228038
@scope=
[#<Deal:0x00007fbc5fdb2400
id: 7,

我想如果我知道如何使用“普通”where 语句进行比较(而不是相等),例如 where(end_date>Date.today)创可贴我的问题,因为范围方法使用简单的 where 语句,如 scope :posted, -> { where.not(posted_date:nil) } 返回正常可用ActiveRecord.Relation,但我确实想知道如何正确使用更复杂的 where 查询。

最佳答案

你可以使用如下:

scope :current, -> { where('end_date > ?', Date.today) }

where 调用的 block 语法在 Rails 中不存在。

您还可以查看 arel ( https://robots.thoughtbot.com/using-arel-to-compose-sql-queries );

deal = Deal.arel_table
Deal.where(deal[:end_date].gt(Date.today))

关于ruby-on-rails - Rails 范围方法返回 WhereChain 而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54392093/

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