LINUX.ORG.RU

Rails: associations

 


1

2

Есть модель Cat. У кошки есть родители. Хочу делать выборку для заданной кошки, получать всех её детей (в смысле, котят, а не рекурсивно).

Сначала хотел сделать самоприсоединение для Cat, добавить поля father и mother, но в таком варианте, я не знаю, как указать, что дети - это сумма дочерних записей с father_id и mother_id равные ID текущей записи. Перед тем, как переделаю на использование с промежуточной таблицей и :through (с полями parent и parent_type), может, всё-таки, есть возможность как-то хитро указать has_many :children1, :class_name => 'Cat', :foreign_key => :father и has_many :children2, :class_name => 'Cat', :foreign_key => :mother «в одном флаконе»?

зы: но если есть ещё какие-то недостатки самоприсоединения в данном случае, хочу узнать о них.

★★

Последнее исправление: CYB3R (всего исправлений: 5)

Подпишусь, сам недавно сталкивался с подобной таблицей. Решил изменением иерархии моделей, но всё равно интересно.

drakmail ★★★★
()

Если у тебя последняя версия рельсов — 3.2.7 — то никак. Нужно юзать скоуп и оборачивать его вызов в метод, возвращающий Relation. Методы, которые генерит has_many, придётся писать самому (если они вообще нужны, конечно).

Apple-ch ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.