Неправильные типы классов, используемые в SQL, когда STI используется с запросом соединения - PullRequest
0 голосов
/ 20 июня 2019

Я недавно обновился с Rails 4.1.4 до 4.2.8, и у меня очень странное поведение.Таким образом, у нас есть таблица class Identity < ActiveRecord::Base и таблицы Doctor, Assistant, Substitute, которые унаследованы от нее.

Так что, когда я за пределами любого из этих классов и делаю call (rails console, specs)

Doctor.all.to_sql => "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Doctor')", что хорошо.

Когда я делаю тот же вызов, но из метода класса в модели Assistant, он выдает следующее Doctor.all.to_sql => "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Assistant', 'Substitute')", что неверно.

Пока я нахожусь внутри метода класса в модели Assistant и выполняю

Doctor.unscoped.all => "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Doctor')" хороший запрос.

Я проверил, установим ли мы где-нибудь default_scopeно мы неКроме того, это довольно сложно, так как когда я делаю SomeTable.joins(:identities), я не могу отсканировать identities, что приводит меня к неправильному запросу.

Итак, я не совсем уверен, что произошло после обновления, но я знаю, что это работает со старыми Rails 4.1.4.

Любой намек будет полезен.

Regads

1 Ответ

0 голосов
/ 21 июня 2019

После обновления до Rails 4.2.11 проблема исчезла.Я приложу еще больше усилий, чтобы воспроизвести это поведение на старых версиях и, при необходимости, сообщу команде rails.

...