Rails: Как работают самореферентные модели has_many? - PullRequest
15 голосов
/ 24 февраля 2011

Итак, я работаю над приложением, в котором я хочу, чтобы пользователи могли группировать объекты в «папках».В основном:

User has_many :foos

Foos не обязательно должны быть в папке, но они могут быть.В этом случае:

Folder has_many :foos и Foo belongs_to :folder

Теперь я хотел бы иметь возможность настроить папки, чтобы они могли быть вложенными.Я думаю, что это что-то вроде ...

Folder has_many :folders

Я слышал, что такого рода отношения со ссылками на себя не имеют большого значения, но я не совсем понимаю, как это работает,Я не смог выяснить, как это должно быть объявлено в модели и какие столбцы мне нужно предоставить в базе данных.

Может ли кто-нибудь предложить пример?Я также буду признателен за любые предложения / хедз-апы / предупреждения / извлеченные уроки, которые вы могли бы предложить о настройке такого рода отношений в приложении.

Спасибо!

1 Ответ

31 голосов
/ 24 февраля 2011

Оформить ответ Coreyward на этот вопрос здесь: Создание модели с древовидной структурой

По сути, вы хотите добавить поле «parent_id» в таблицу папок, а затем настроитьотношения в вашей папке модели, как это:

belongs_to :parent, :class_name => "Folder"
has_many :folders, :foreign_key => "parent_id"
...