Rails самореферентный has_many через пользовательское имя таблицы соединений

У меня возникли некоторые проблемы с обдумыванием следующей ситуации..

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

Итак, я хочу иметь модели узлов и отношений.Каждый

Node 
 has_many :relations

Каждый

Relation 
 has_many :nodes

узел может быть как родительским, так и дочерним. До сих пор все было просто, и есть множество примеров, показывающих, как сделать самореферентную таблицу has_many... Проблема в том, что я хочу чтобы иметь возможность давать имена отношениям, чтобы я мог сделать что-то вроде:

relation1 = node1.relations.create(:name => "relation_name", :child => node2)

и в результате получить что-то вроде:

relation1.name == "relation_name"
relation1.parent == node1
relation1.child == node2

Все создания происходят внутри модели, эта деятельность на самом деле не подвергается воздействию пользователя, если это имеет значение. Спасибо!

РЕДАКТИРОВАТЬ2: Вот как это работает сейчас:

class Node < ActiveRecord::Base
  belongs_to :sentence

  has_one :parent_relation, :foreign_key => "child_id", :class_name => "Relation"
  has_many :child_relations, :foreign_key => "parent_id", :class_name => "Relation"

  has_one :parent, :through => :parent_relation
  has_many :children,  :through => :child_relations, :source => :child

  has_many :relations, :foreign_key => "child_id"
  has_many :relations, :foreign_key => "parent_id"

class Relation < ActiveRecord::Base

  has_many :videos, :as => :videoable, :dependent => :destroy
  has_many :phrases, :through => :videos

  belongs_to :parent, :class_name => "Node"#, :inverse_of => :parent_relation
  belongs_to :child, :class_name => "Node"#, :inverse_of => :child_relation
5
задан Stpn 30 March 2012 в 04:21
поделиться