在我的Rails應用程序中,用戶可以訂閱其他用戶。一個應該能夠從用戶實例中獲得用戶的訂閱和訂閱者。Rails雙向自引用has_many:通過 - 控制器設置?
現在,我有一個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
行動,並在我的UsersController
subscriptions
和subscribers
行動。但是,我想知道是否沒有更好的(更RESTful?)方式來執行此操作。通過SubscriptionsController
上的index
操作訪問用戶的訂閱和訂閱者,也許?
一個has_and_belongs_to_many關係應該會最好是imo。 HABTM追隨者和HABTM追隨者。 – Garrett 2010-06-23 16:53:12