【问题标题】:activerecord class from custom sql query来自自定义 sql 查询的 activerecord 类
【发布时间】:2014-09-11 17:07:10
【问题描述】:

是否可以从自定义 sql 查询或视图创建 activerecord 类? 它不需要是可编辑的。 示例:

class c
  select a.*, b.* from a, b where a.code = b.code
end

这个例子是一个连接,其中两个表中的所有字段都被重新发送,activerecord 中的一对一连接只显示一个表中的字段,其他的可以通过 a.bs.fieldname 访问。 我希望它们是同一级别的字段,因此属于一个类。

这样a.code、a.name 和b.code、b.extra 可以作为c.code、c.name、c.extra 访问

【问题讨论】:

    标签: ruby activerecord


    【解决方案1】:

    ActiveRecord 将与您的视图一起使用,就像与表格一样。所以,首先为你的东西创建自定义视图

    CREATE VIEW some_things AS (select a.*, b.* from a, b where a.code = b.code)
    

    然后创建基于 ActiveRecord 的类来访问它们 (app/models/some_thing.rb)

    class SomeThing < ActiveRecord::Base
    end
    

    您可以像访问任何其他 AR 对象一样访问您的东西

    p SomeThing.where(code: 'xxx-yyy').order(:name).limit(10).all
    

    【讨论】:

    • 这种方法的缺点是大多数 RDBMS 系统不允许视图上的索引。这意味着您正在执行线性扫描以找到您想要的记录。
    • 您始终可以在源表上创建索引以提高 VIEW 性能。因此,在这种情况下,您可以创建 2 个索引:a(code)b(code)。最好通过a(name) 字段添加索引。
    猜你喜欢
    • 2011-09-12
    • 2015-04-14
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多