Как заставить graphql-ruby сериализовать вычисляемые/спроецированные/производные/небазовые столбцы из запроса в модели ActiveRecord

С использованием

  result = Model.select(Model.table_name + '.*')
  result = result.select(47 AS new_column)
  result = result.where(...).order(...).limit(...) # etc.

  result.to_a # gives an array of Model instances

Мне нужно получить доступ к значению new_column как к атрибуту экземпляров модели.

Я не хочу создавать в модели вычисляемый атрибут; данные должны исходить из построенного запроса. Данные столбца, не относящегося к базе данных, должны быть загружены, так как экземпляр модели раздувается #to_a

Я прочитал Включение пользовательского предложения SELECT в запрос ActiveRecord и Вернуть пользовательские столбцы в Rails ActiveRecord Query, которые выглядели связанными, но не являются.

Запрос ActiveRecord с вложенными моделями и значениями производных столбцов? , Доступ к вычисляемым столбцам SQL через ActiveRecord и Добавление вычисляемого столбца в запрос ActiveRecord выглядит так, как будто они отвечают на мой вопрос , но они, кажется, говорят, что дополнительные значения столбцов из исходного запроса автоматически присоединяются к экземпляру модели, и для их получения (или нет) просто добавляются методы доступа.

Я добавил attr_accessor для имен новых столбцов в класс модели, но эти атрибуты, похоже, не сериализуются, когда я возвращаю их как ответ graphQL. Где я могу найти информацию о реальной механике массива AciveRecord#attributes и о том, как добавить в него столбцы, не относящиеся к базе данных?

Ваше здоровье


person Richard Haven    schedule 17.03.2018    source источник
comment
Почему бы просто не создать свой собственный SQL и не использовать find_by_sql, который поддерживает динамические/специальные атрибуты?   -  person Cody Caughlan    schedule 17.03.2018
comment
Приведет ли это к сериализации атрибутов с помощью graphql-ruby? Я подозреваю, что он использует хэш атрибутов или столбцов для доступа к значениям, а новых столбцов нет в этом списке (даже если их значения связаны с экземпляром). Мне нужно сделать их первоклассными атрибутами экземпляра модели, чтобы инфраструктура graphQL распознала их.   -  person Richard Haven    schedule 17.03.2018


Ответы (1)


Иногда Rails действительно так крут

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

Хэш attributes в любом случае имеет дополнительные столбцы.

person Richard Haven    schedule 24.03.2018