2012-05-02 19 views
8

Używam Mongoid dla mojej aplikacji i mam problem z ustawieniem poprawnych relacji dla użytkowników i subskrypcji.Mongoid: belongs_to użytkownik i has_one użytkownik

Wszystko, co trzeba zrobić, to uczynić prostą relację "ma jeden i należy do jednego" dla modelu 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 

Wszystko co chcę zrobić, to mieć listę zapisów dla każdego użytkownika:

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

sposób realizacji tego? Dziękuje Ci za pomoc.

Odpowiedz

10

Problem polega na tym, że masz dwie relacje o tej samej nazwie i potrzebujesz relacji odwrotnej do relacji has_one :user. zawsze można spróbować czegoś takiego:

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 

Następnie powinieneś być w stanie robić takie rzeczy jak:

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

Dzięki! Działa, gdy zmienię has_many relacja na klasie User na: has_many: subscriptions,: class_name => "Subscription",: inverse_of =>: owner –

Powiązane problemy