HABTM Отношения с собой? - PullRequest
       0

HABTM Отношения с собой?

1 голос
/ 29 февраля 2012

Возможно ли иметь в принадлежащей записи, имеющей отношение ко многим, принадлежащей одной и той же модели?

Я хочу смоделировать родственные отношения типа.

class Child < ActiveRecord::Base
  has_and_belongs_to_many :siblings
end

На данный момент я создал таблицу ссылок для братьев и сестер:

class CreateSiblings < ActiveRecord::Migration
  def change
    create_table :siblings do |t|
      t.integer :child1_id
      t.integer :child2_id
      t.timestamps
    end
  end
end

Но я боюсь, что это приведет к тому, что я напишу некрасивый код, чтобы получить реальные экземпляры:

siblings = []
child1.siblings.each do |s|
  siblings << s.child2
end

Я бы предпочел получить массив детей, написав:

child1.siblings

Мне интересно, как должны выглядеть мои таблицы ссылок и ассоциации моделей для поддержки этого?

Чувствую, что мне не хватает чего-то действительно очевидного.

Я на Rails 3.1. Спасибо за любую помощь!

1 Ответ

4 голосов
/ 29 февраля 2012

Метод 1:

Я бы просто добавил столбец с именем что-то вроде parent_id.

Затем я бы сделал метод экземпляра для модели, что-то вроде:

def children
  Model.where({ parent_id: id })
end

И если вам нужен родитель, вы можете сделать что-то вроде:

def parent
  Model.where({ id: parent_id }).first
end

И затем вы можете собрать братьев и сестер так:

def siblings
  parent.children.reject{ |r| r == self }
end

Метод 2:

Вы также можете попробовать с отношением belongs_to, что-то вроде:

belongs_to :parent, class_name: "Model", foreign_key: :parent_id

Но я не уверен на 100% в этом методе.Возможно, вам придется немного подправить это, прежде чем оно заработает.

Надеюсь, это поможет:)

\\ Эмиль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...