Как получить псевдонимы таблицы активных записей
Как я могу получить псевдоним, который генерирует active_record? Я хотел бы создать метод table_alias_of, который принимает 3 аргумента
- Модель, из которой выполняется запрос
- Включает в себя хэш
- Путь ассоциаций
Обращаться к ассоциациям в условиях или в порядке.
Пример: все включает указание на одну и ту же таблицу "контакты".
includes = ["end_user", "reseller", "distributor"]
e = table_alias_of(Maintenance, includes, "end_user")
e #=> contacts
r = table_alias_of(Maintenance, includes, "reseller")
r #=> maintenances_contacts
d = table_alias_of(Maintenance, includes, "distributor")
d #=> maintenances_contacts_2
Maintenance.all(
:include => includes,
:conditions => ["#{d}.name=?", x],
:order => "#{r}.name, #{e}.name"
Как я могу реализовать table_alias_of? Он должен быть совместим с рельсами 2.3.x, а также с рельсами 3.1.x
То, что я уже сделал / думал о том,
- Позволяет rails генерировать строку предложения from и анализировать ее с помощью регулярного выражения. Но это ломается при переходе на рельсы 3/ арель.
- Написание:join или: от себя, потому что тогда вы указываете псевдонимы таблицы. Но это делает код более сложным
- Парсинг: включает и генерирует соединение с кодом. Это просто копирование логики.