2011-01-18 26 views
5

Tengo un modelo de Entidad y quiero mostrar las conexiones entre las Entidades. es decir, la Entidad 1 está conectada a la Entidad 2.Modelos autorreferenciados en Rails 3

Mi pensamiento, en este momento, es crear un modelo de unión entre las dos llamadas Conexión y hacer que funcione como una tabla tradicional de unión de rieles. Excepto que las columnas sean entity_one_id y entity_two_id, luego establezca una relación many-to-many entre Entity y Connection.

Esto parece una manera realmente no elegante de hacer esto. Me preguntaba si alguien tenía mejores ideas. ¿Tal vez algo más parecido a los rieles que simplemente no estoy viendo?

Respuesta

8

Esa es la forma más común de hacerlo. Si una entidad solo está conectada a otro modelo, puede usar una estructura de árbol de listas vinculadas.

Echa un vistazo Ryan Bates' Railscast on self-joining models. Se trata de un sistema de red social similar, pero todavía tiene principios que necesita y proporciona un punto de partida

1

Usted podría utilizar esta aplicación:

class User < ActiveRecord::Base 
    has_many :friends, :through => :friendships, :conditions => "status = 'accepted'" 
    has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at 
    has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending'", :order => :created_at 
    has_many :friendships, :dependent => :destroy 
end 


class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
end 
+3

la implementación robaste Railscast de Ryan? :) – sethvargo

+3

De hecho, no recuerdo dónde lo recogí, pero definitivamente tienes razón :) – apneadiving