Создание результатов наследованной модели STI из exec_query - PullRequest
0 голосов
/ 30 января 2019

Учитывая этот запрос, который возвращает хеш:

def query
  sql = %(SELECT * FROM components
          INNER JOIN brands_components ON brands_components.component_id = components.id
          INNER JOIN brands ON brands.id = brands_components.brand_id
          INNER JOIN components_templates ON components.id = components_templates.component_id
          WHERE components_templates.template_id = #{@template.id}
          AND (components.user_id IS null OR components.user_id = #{@user.id})
          AND brands.id = #{@user.brand_id})
  ActiveRecord::Base.connection.exec_query(sql)
end

Как я могу создать экземпляр результата для коллекции ActiveRecord (особенно, если они представляют разные модели [т.е. STI-унаследованные от Component])?

1 Ответ

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

Передача sql в find_by_sql создаст экземпляры моделей, поэтому изменение метода на

def query
  sql = [some sql]
  Component.find_by_sql(sql)
end

должно дать вам то, что вы хотите.Также будет создан правильный подкласс для каждой записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...