Самореферентные модели в Rails 3 - PullRequest
5 голосов
/ 18 января 2011

У меня есть модель сущностей, и я хочу отобразить соединения между сущностями.т. е. сущность 1 подключена к сущности 2.

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

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

Ответы [ 2 ]

8 голосов
/ 18 января 2011

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

Выезд Рейнскаст Райана Бейтса на самосоединяющихся моделях . Она имеет дело с системой, подобной социальной сети, но в ней все еще есть принципы, которые вам понадобятся, и она обеспечивает отличную отправную точку

1 голос
/ 18 января 2011

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...