Создание экземпляров моделей ActiveRecord и их взаимосвязей вручную? - PullRequest
3 голосов
/ 05 октября 2009

Если у меня есть T-SQL (или сохраненный процесс), который возвращает записи из нескольких таблиц (возможно, с использованием DBI), есть ли способ вручную создать экземпляры моделей ActiveRecord и их связей? Очевидно, я здесь за производительностью базы данных. Я хотел бы иметь возможность строить свою собственную иерархию объектов (модели и их отношения), но когда я все это сделаю, я ожидаю, что каждая модель будет вести себя нормально. То есть я надеюсь, что это будет выполнено без какого-либо взлома, который может вызвать странное поведение моей структуры.

EDIT:

Это немного надумано, но оно иллюстрирует, как один запрос может вернуть данные на глубину n уровней (где "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 голосов
/ 20 октября 2009

Если я понимаю, к чему вы клоните, вы пытаетесь выполнить несколько SQL-запросов одновременно, и при этом Rails возвращает все созданные экземпляры моделей, как обычно.

То, что вы действительно хотите, это:

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

, который извлекает все интересующие вас записи в одном запросе и правильно создает объекты AR.

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