Неопределенная локальная переменная или метод arel_table после обновления Rails - PullRequest
0 голосов
/ 21 апреля 2020

Я обновляю свое приложение с Rails 5.0.1 до Rails 6.0

. Все области действия, определенные с помощью arel, перестают работать.

scope :published,      -> { where(state: 'published').where arel_table[:published_at].lteq 'NOW()' }

Не возвращайте мне ничего, но ошибка

Content.where(state: 'published').where arel_table[:published_at].lteq 'NOW()'

Traceback (most recent call last):
        1: from (irb):4
NameError (undefined local variable or method `arel_table' for main:Object)

Но

Content.arel_table.class
=> Arel::Table

РЕДАКТИРОВАТЬ

Если я использую

Content.where(state: 'published').where Content.arel_table[:published_at].lteq 'NOW()'

Запрос работает, но NOW () равен NULL

 Content Load (0.5ms)  SELECT "contents".* FROM "contents" WHERE "contents"."state" = $1 AND "contents"."published_at" <= NULL ORDER BY "contents"."published_at" DESC LIMIT $2  [["state", "published"], ["LIMIT", 11]]
=> #<ActiveRecord::Relation []>

Почему?

1 Ответ

0 голосов
/ 21 апреля 2020

Попробуйте это:

-> { where(state: 'published').where(Content.arel_table[:published_at].lteq(Arel.sql('NOW()'))) }

Я не могу найти причину этого изменения, но я предполагаю, что это связано с тем, как вычисляется предложение.

Я бы предложил не использовать связанные с Arel метод, если вам это действительно не нужно. В этом случае вы можете написать более простой код, подобный этому:

{ where(state: 'published').where("contents.published_at <= ?", Time.current) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...