2012-05-02 6 views
8

Tôi đang sử dụng Mongoid cho ứng dụng của mình và tôi gặp sự cố khi thiết lập mối quan hệ chính xác cho Người dùng và đăng ký.Mongoid: thuộc về người dùng và has_one người dùng

Tất cả những gì tôi cần làm là tạo mối quan hệ đơn giản "có một và thuộc về một" đối với mô hình UserSubscription.

class User 
    has_many :user_subscriptions 
end 

class UserSubscription 
    belongs_to :user 

    has_one :user # user2 to which user1 is subscribed 
    field :category, :String 
end 

Tất cả tôi muốn làm là để có một danh sách đăng ký cho mỗi người dùng:

> user1.user_subscriptions # list of subscription objects 
> user1.user_subscriptions << UserSubscription.create(:user => user2, :category => 'Test') 
> user1.user_subscriptions.where(:user => user2).delete_all 

Làm thế nào để thực hiện điều này? Cảm ơn bạn đã giúp đỡ.

Trả lời

10

Vấn đề là bạn có hai quan hệ có cùng tên và bạn cần có mối quan hệ nghịch đảo cho mối quan hệ has_one :user của mình. Bạn luôn có thể thử một cái gì đó như thế này:

class User 
    include Mongoid::Document 

    has_many :subscriptions 
    has_many :subscribers, :class_name => "Subscription", :inverse_of => :subscriber 
end 

class Subscription 
    include Mongoid::Document 

    field :category 

    belongs_to :owner, :class_name => "User", :inverse_of => :subscriptions 
    belongs_to :subscriber, :class_name => "User", :inverse_of => :subscribers 
end 

Sau đó, bạn sẽ có thể làm những việc như:

> user1.create_subscription(:subscriber => user2, :category => "Test") 
> user1.subscriptions.where(:subscriber => user2).delete_all 
+1

Cảm ơn! Nó hoạt động khi tôi thay đổi mối quan hệ has_many trên Lớp người dùng thành: has_many: đăng ký,: class_name => "Đăng ký",: inverse_of =>: owner –