2015-01-05 3 views
2

Для моего проекта у меня есть сообщение, связанное с категорией. То, что я хочу достичь, состоит в том, чтобы иметь категорию, которая является родственником других. Как это:Рекурсивные отношения во многих отношениях на Rails

c1 = Category.create(name: 'Television') 
c2 = Category.create(name: 'TV') 

c1.relatives << c1 

Я использую присоединиться к таблице:

create_table :category_relative, id: false do |t| 
    t.belongs_to :category_1 
    t.belongs_to :category_2 
end 

add_index :category_relative, [:category_1_id, :category_2_id] 

До сих пор, я попытался это:

class Category < ActiveRecord::Base 
    has_and_belongs_to_many :relatives, class_name: 'Category', 
         join_table: 'category_relative', foreign_key: 'category_1_id', 
         association_foreign_key: 'category_2_id' 
end 

Это работает, но только в одном виде:

c1.relatives 
=> [] 
c2.relatives 
=> [#<Category:0x007fcc610b8418 id: 1, name: 'Television'] 

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

c1.relatives << c2 
c2.relatives << c1 

У вас есть информация? Должен ли я писать JOIN вручную?

+0

Вы используете другие таблица между категориями? – ppascualv

+0

Я использую таблицу соединений 'category_relative' (я редактирую свой ответ) – cappie013

+0

Вы уже решили вопрос? – ppascualv

ответ

0

Вы можете попробовать что-то вроде этого

class Category < ActiveRecord::Base 
    has_many :category_relatives, dependent: :destroy 
    has_many :relatives, :through => :category_relative 
    has_many :inverse_category_relatives, :class_name => "categoryRelative", :foreign_key => "category_2_id", dependent: :destroy 
    has_many :inverse_relatives, :through => :inverse_category_relative, :source => :category 
end 

через класс:

class CategoryRelative < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :relative, :class_name => "Category" 
end 

С помощью этого кода у вас есть отношения многих ко многих между одноименным классом thourgh другого

+0

У меня есть аналогичная модель в собственном проекте, она должна работать – ppascualv

+0

Должен ли я создать другую модель (CategoryRelative)? – cappie013

+0

Да с приложением, я добавил, я делаю редактирование, все has_many должны быть pluralize – ppascualv

Смежные вопросы