手动实例化ActiveRecord模型及其关系?

时间:2009-10-05 12:43:29

标签: ruby-on-rails activerecord

如果我有T-SQL(或存储过程)从多个表中返回记录(也许使用DBI),我有办法手动实例化ActiveRecord模型及其关联吗?显然,我在这里追求数据库性能。我希望能够构建自己的对象层次结构(模型及其关系),但是当我完成所有工作后,我希望每个模型都能正常运行。也就是说,我希望这可以在没有一些可能导致我的结构表现奇怪的黑客的情况下完成。

编辑:

这有点做作,但它确实说明了一个查询如何返回深层数据(其中“n”只有实际限制)并在一次调用中返回所有内容:

SELECT * FROM customers 
  WHERE id = 1;

SELECT * FROM orders 
  WHERE customer_id = 1;

SELECT * FROM lineitems 
  WHERE order_id IN (
  SELECT id FROM orders 
    WHERE customer_id = 1
  );

然后拥有所有记录我只会自己映射关联。通过ActiveRecord执行此操作的问题是:include会多次命中数据库而不是一次 - 这会因“n”增加而变得更加沉重。

1 个答案:

答案 0 :(得分:0)

如果我理解你的目标是什么,那么你正试图一次执行多个sql查询,并且仍然会像往常一样让Rails返回所有实例化的模型。

你真正想要的是:

Customer.find(:all, :include => {:orders => :lineitems})

将在单个查询中获取您感兴趣的所有记录并正确创建AR对象。