2011-01-18 2 views
5

У меня есть модель Entity, и я хочу отображать соединения между Entities. т.е. Entity 1 подключен к объекту 2.Модели саморегуляции в Rails 3

Мое мышление сейчас состоит в том, чтобы создать модель соединения между двумя называемыми Connection и заставить ее работать как традиционная таблица соединений рельсов. Кроме того, столбцы должны быть entity_one_id и entity_two_id, а затем установить отношение «многие ко многим» между Entity и Connection.

Это похоже на действительно не элегантный способ сделать это. Мне было интересно, есть ли у кого-нибудь лучшие идеи? Может, что-то еще рельс-эск, которого я просто не вижу?

ответ

8

Это самый распространенный способ сделать это. Если объект подключен только к одной другой модели, вы можете использовать структуру с похожими списками, подобную древовидной структуре.

Отъезд Ryan Bates' Railscast on self-joining models. Он имеет дело с социально-сети, как система, но она все еще имеет принципы, которые вы будете нуждаться, и обеспечивает большую начальную точку

1

Вы могли бы использовать эту реализацию:

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

реализации вы украли у Railscast Райана? :) – sethvargo

+3

Действительно, я не помню, где я его поднял, но ты определенно прав :) – apneadiving

Смежные вопросы