Метод области действия Rails возвращает WhereChain вместо массива - PullRequest
0 голосов
/ 27 января 2019

В моем классе 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, но я хочу выяснить, как использовать более сложные, где запросы, подобные этому, правильно.

1 Ответ

0 голосов
/ 27 января 2019

Вы можете использовать следующее:

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

Синтаксис блока для where -вызова не существует в Rails.

Вы также можете заглянуть в arel(https://robots.thoughtbot.com/using-arel-to-compose-sql-queries);

deal = Deal.arel_table
Deal.where(deal[:end_date].gt(Date.today))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...