ruby-on-rails - 从 exec_query 实例化 STI 继承模型结果

标签 ruby-on-rails postgresql activerecord ruby-on-rails-5

给定返回哈希的查询:

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])?

最佳答案

将 sql 传递给 find_by_sql将实例化模型,因此将方法更改为

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

应该给你你想要的。它还将为每条记录实例化正确的子类。

关于ruby-on-rails - 从 exec_query 实例化 STI 继承模型结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429895/

相关文章:

database - 服务器无法连接到 pgbouncer (PostgreSQL)

postgresql - DISTINCT ON 仍然给我一个错误,选择项目应该在 GROUP BY

sql - Rails Active Record 查询 : answered questions, 按答案日期排序,不重复

sql - 如何通过 select 和 subselect 或 join 语句获取数据

php - 处理 Codeigniter 查询中的括号

ActiveRecord 迁移多个数据库

ruby-on-rails - 即使我在开发 block 中有 sqlite,Heroku 也不接受推送

ruby-on-rails - 为什么 ActiveRecord 的自动保存对我的关联不起作用?

ruby-on-rails - Ruby on Rails - 全局变量?

ruby-on-rails - Ruby:使用 ruby​​ 连接到打印机