Модель, которая ссылается на многие из себя? - PullRequest
0 голосов
/ 02 октября 2011

Учитывая следующий класс, как бы я позволил узлу иметь отношения многие ко многим с другими узлами (такими как parent_node и child_nodes)?

class Node
  include MongoMapper::Document

  key :text, String
end

1 Ответ

5 голосов
/ 04 октября 2011

Могут ли дети иметь более одного родителя? Если нет, то многие / assign_to должны нормально работать:

class Node
  include MongoMapper::Document

  key :text, String
  key :parent_node_id, ObjectId

  belongs_to :parent_node, :class_name => 'Node'
  many :child_nodes, :foreign_key => :parent_node_id, :class_name => 'Node'
end

Если узлы могут иметь несколько родителей ...

class Node
  include MongoMapper::Document

  key :text, String
  key :parent_node_ids, Array, :typecast => 'ObjectId'

  many :parent_nodes, :in => :parent_node_ids, :class_name => 'Node'

  # inverse of many :in is still forthcoming in MM
  def child_nodes
    Node.where(:parent_node_ids => self.id)
  end
end

# ... or store an array of child_node_ids instead ...

class Node
  include MongoMapper::Document

  key :text, String
  key :child_node_ids, Array, :typecast => 'ObjectId'

  many :child_nodes, :in => :child_node_ids, :class_name => 'Node'

  # inverse of many :in is still forthcoming in MM
  def parent_nodes
    Node.where(:child_node_ids => self.id)
  end
end

Это то, что вы ищете?

...