代码之家  ›  专栏  ›  技术社区  ›  t56k

从exec_查询实例化STI继承的模型结果

  •  2
  • t56k  · 技术社区  · 6 年前

    给定此返回哈希的查询:

    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集合(特别是当它们表示不同的模型时[例如,从 Component

    1 回复  |  直到 6 年前
        1
  •  2
  •   ulferts    6 年前

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

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

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