On Dec 22, 11:16 pm, Devin M <[email protected]> wrote: > Hello, > I am looking to create a rails app that will model and display > related nodes. I am just beginning to dive into active record and I > was wondering if the following pesudo code would work? > > class NodeLink < ActiveRecord::Base > belongs_to :node # foreign key - node_id (recorded as > primary_node_id) > belongs_to :node # foreign key - node_id (recorded as > secondary_node_id) > end
You'll need to specify different names for these two associations; a working declaration might look like: class NodeLink < ActiveRecord::Base belongs_to :primary_node, :class_name => 'Node' belongs_to :secondary_node, :class_name => 'Node' end > class Node < ActiveRecord::Base > has_many :nodes, :through => :node_links > end This gets messier: class Node < ActiveRecord::Base has_many :primary_links, :foreign_key => 'primary_node_id', :class_name => 'NodeLink' has_many :secondary_links, :foreign_key => 'secondary_node_id', :class_name => 'NodeLink' has_many :primary_nodes, :through => :primary_links, :source => :secondary_node has_many :secondary_nodes, :through => :secondary_links, :source => :primary_node end This offers some additional detail: http://stackoverflow.com/questions/578084/how-to-implement-undirected-graph-in-ruby-on-rails Note that it's going to be fairly complicated to deal with "all nodes that are connected to this one" unless you denormalize somewhat and make *two* NodeLinks for each edge. You may want to consider if you *really* need a completely undirected graph, or if there's additional structure (tree-like behavior, for instance) that you can simplify things with. If this is a central concern to your app, you may want to look into the specialized "graph databases" that are now available. --Matt Jones -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

