У меня есть отношения «принадлежит» и «имеет_многие».
Дочерний элемент принадлежит родителю Родитель имеет_много дочерних элементов.
Однако у меня также есть другой способ, которым Parent может иметь дочерний элемент, и это через join_table, который я использую для создания группировки родительского типа.
Вот мое ужасное предположение о том, как это сделать:
# child.rb
belongs_to :parent
belongs_to :parent_group, :dependent => :destroy
delegate :parent, :to => :parent_group
# parent.rb
has_many :children
has_many :children, through: :parent_groups
Обратите внимание: на самом деле я не использую эти соглашения об именах. Они были просто изменены, чтобы сохранить анонимность моей работы.
Тогда мои миграции выглядят так:
class CreateParentGroup < ActiveRecord::Migration
def self.up
create_table :parent_groups do |t|
t.integer :parent_id
t.timestamps
end
add_column :child, :parent_group_id, :integer
end
Итак, моя цель состоит в том, чтобы сделать так, чтобы при вводе Parent.find(n).children
он возвращал дочерние объекты, которые либо через родительскую_группу, либо любые дочерние элементы, непосредственно связанные с ней.
И наоборот, если бы я выбрал Child.find(n).parent
, он выбрал бы своего родителя, независимо от того, был ли он через родительскую группу или нет.
И тогда, наконец, я смогу выбирать parent_groups и выбирать коллекции родителей.
Есть идеи?