Как я правильно понимаю, у вас есть таблица категорий с циклической ссылкой, реализованная в столбце id_cat.
Следующая модель должна работать так, как вы ожидали:
class Category < ActiveRecord::Base
belongs_to :supercategory, :class_name => "Category", :foreign_key => "cat_id"
has_many :subcategories, :class_name => "Category", :foreign_key => "cat_id"
end
Так что если categories
таблица выглядит следующим образом:
id | name | cat_id
---------------------------
1 | cat 1 | null
2 | cat 1.1 | 1
3 | cat 1.2 | 1
4 | cat 2 | null
5 | cat 1.2.1 | 3
Category.find(1).subcategories
возвращает массив с объектами cat 1.1
и cat 1.2
.
Category.find(1).supercategory
возвращает nil
Category.find(3).supercategory
возвращает cat 1
объект
Category.find(4).supercategory
возвращает nil
...