Rails двухсторонний самореферентный has_many: через - настройка контроллера? - PullRequest
3 голосов
/ 23 июня 2010

В моем приложении Rails пользователь может подписаться на других пользователей.Нужно иметь возможность получать пользовательские подписки и подписчики из пользовательского экземпляра.

Сейчас у меня есть модель User и модель Subscription.Subscription - это модель соединения (присоединение User к User) в двустороннем самообращении has_many :through.

Подписка:

class Subscription < ActiveRecord::Base
  belongs_to :from_user, :class_name => 'User'
  belongs_to :to_user, :class_name => 'User'
end

Пользователь:

class User < ActiveRecord::Base
  ...
  has_many :subscriptions_as_subscriber, :foreign_key => 'from_user_id', :class_name => 'Subscription', :dependent => :destroy
  has_many :subscriptions_as_subscription, :foreign_key => 'to_user_id', :class_name => 'Subscription', :dependent => :destroy
  has_many :subscribers, :through => :subscriptions_as_subscription, :source => :from_user
  has_many :subscriptions, :through => :subscriptions_as_subscriber, :source => :to_user
  ...
end

Первый вопрос: лучше ли мне будет обслуживаться другой установкой?

Второй вопрос: Как я могу создать контроллер (ы) для создания и уничтожения подписок и для доступа к подпискам пользователя иподписчики?

Прямо сейчас у меня есть SubscriptionsController с create и destroy действиями и subscriptions и subscribers действиями в моих UsersController.Тем не менее, мне интересно, если нет лучшего (более RESTful?) Способ сделать это.Доступ к подпискам и подписчикам пользователя с помощью действия index на SubscriptionsController, возможно?

1 Ответ

1 голос
/ 23 июня 2010

Я бы порекомендовал awesome_nested_set от коллективного представления. Это легко реализовать и должен дать вам функциональность, которую вы ищете.

Вот пост с некоторыми деталями реализации, которые вы можете позаимствовать у: http://www.justinball.com/2009/01/18/heirarchies-trees-jquery-prototype-scriptaculous-and-acts_as_nested_set/

UPDATE:

Я бы видел эту настройку в виде дерева:

Subscriber
 + subscription
   + subscription
     + subscription
   + subscription
   + subscription
 + subscription
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...