Как я могу получить псевдоним, который генерирует 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 или: от себя, потому что тогда вы указываете псевдонимы таблиц. Но это делает код более сложным
- Парсинг: включает и генерирует соединение с кодом. Это просто копирование логики.