3 Stimmen

Rails zwei-Wege-selbstreferentielle has_many :durch -- Controller-Setup?

In meiner Rails-App kann ein Benutzer andere Benutzer abonnieren. Man sollte in der Lage sein, die Abonnements und Abonnenten eines Benutzers aus einer Benutzerinstanz zu erhalten.

Im Moment habe ich eine User Modell und ein Subscription Modell. Subscription ist das Verbindungsmodell (Verbindung User à User ) in einem zweiseitigen selbstreferentiellen has_many :through Beziehung.

Abonnement:

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

Benutzer:

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

Erste Frage: Wäre ich mit einer anderen Einrichtung besser bedient?

Zweite Frage: Wie könnte ich Controller erstellen, um Abonnements zu erstellen und zu zerstören und um auf die Abonnements und Abonnenten eines Benutzers zuzugreifen?

Im Moment habe ich eine SubscriptionsController con create y destroy Aktionen, und subscriptions y subscribers Aktionen in meinem UsersController . Allerdings frage ich mich, wenn es nicht eine bessere (mehr RESTful?) Weg, dies zu tun. Der Zugriff auf die Abonnements und Abonnenten eines Benutzers über die index Klage auf SubscriptionsController vielleicht?

1voto

Geoff Lanotte Punkte 7460

Ich würde empfehlen awesome_nested_set von collective_idea. Es ist ein Kinderspiel, zu implementieren und sollte Ihnen die Funktionalität, die Sie suchen.

Hier ist ein Beitrag mit einigen Details zur Umsetzung, den Sie sich ausleihen können: http://www.justinball.com/2009/01/18/heirarchies-trees-jquery-prototype-scriptaculous-and-acts_as_nested_set/

UPDATE:

Ich würde diesen Aufbau als einen Baum betrachten:

Subscriber
 + subscription
   + subscription
     + subscription
   + subscription
   + subscription
 + subscription

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X