在我的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
,但是我确实想弄清楚如何正确地使用更复杂的查询。
答案 0 :(得分:5)
您可以使用以下方式:
scope :current, -> { where('end_date > ?', Date.today) }
Rails中不存在where
调用的块语法。
您还可以查看arel
(https://robots.thoughtbot.com/using-arel-to-compose-sql-queries);
deal = Deal.arel_table
Deal.where(deal[:end_date].gt(Date.today))