Простой вызов работает как задумано. Результирующий SQL использует LEFT OUTER JOIN s для связывания таблиц по желанию.
> Subscription.includes(plan: { student: :person }).order('persons.name')
=> #<ActiveRecord::Relation ... >
Если функция вставляется в предложении order , кажется, что rails выходит из-под контроля в своем плане запросов, поскольку результирующий SQL не выполняет связывание таблиц и, следовательно, выдает ошибку:
> Subscription.includes(plan: { student: :person }).order('unaccent(persons.name)')
=> ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "persons")
LINE 1: ...subscriptions".* FROM "subscriptions" ORDER BY unaccent(persons.na...
^
: SELECT "subscriptions".* FROM "subscriptions" ORDER BY unaccent(persons.name) LIMIT $1
То же самое не относится к объединениям , которые выполняют команду НО, используя INNER JOIN s в качестве связи таблицы (не совсем предполагаемое отношение)
> Subscription.joins(plan: { student: :person }).order('unaccent(persons.name)')
=> #<ActiveRecord::Relation ... > # GOOD
Как новичок здесь, что мне не хватает?