2015-04-01 47 views
2

我無法弄清楚如何正確工作,所以讓我解釋一下。同一類型的多個多態關係在一個模型中 - MongoID

我有我的課我愛:

class Like 
    include Mongoid::Document 
    belongs_to :likable, polymorphic: true 
    belongs_to :user 
end 

class Submission 
    include Mongoid::Document 

    belongs_to :creator, class_name: 'User', inverse_of: :submissions 
    has_many :likes, :as => :likable, :dependent => :destroy 
end 

然後引起該問題的類:

class User 
    include Mongoid::Document 
    has_many :submissions, :dependent => :destroy 

    has_many :liked_submissions, :as => :likable, :dependent => :destroy, class_name: 'Like' 
    has_many :liked_comments, :as => :likable, :dependent => :destroy, class_name: 'Like' 
end 

現在的問題是,我無法弄清楚如何正確兼得「用戶類中的「liked_comments」和「liked_comments」。當我像上面那樣做時,我得到錯誤:Ambiguous relations :liked_submissions, :liked_comments defined on User.當試圖創建一個像提交。

我環顧四周,發現一個Github的問題,說這可能是不可能的,但我再也找不到這個問題了,我甚至不確定它是否與這個問題有關。

這是可能的,如果沒有,有任何建議來解決它?我想在BlogPost模型中使用喜歡,但如果這不起作用,我將不得不尋找另一種方式。

在此先感謝。

回答

2

我想這和它的作品使用mongoid版本4.0.2:

class Like 
    include Mongoid::Document 

    belongs_to :likable, polymorphic: true 
    belongs_to :user, inverse_of: :user 
end 

class Submission 
    include Mongoid::Document 

    belongs_to :creator, class_name: 'User', inverse_of: :submissions 
    has_many :likes, as: :likable, dependent: :destroy 
end 

class User 
    include Mongoid::Document 

    has_many :submissions, dependent: :destroy 

    has_many :likes, as: :user 
    has_many :liked_submissions, as: :likable, dependent: :destroy, class_name: 'Like' 
    has_many :liked_comments, as: :likable, dependent: :destroy, class_name: 'Like' 
end 

class BlogPost 
    include Mongoid::Document 

    has_many :likes, as: :likable, dependent: :destroy 
end 

而且user.liked_submissionsuser.liked_comments是相同的關係,所以它等於宣告這樣一個別名:

class User 
    include Mongoid::Document 

    has_many :submissions, dependent: :destroy 

    has_many :likes, as: :user 
    has_many :liked_submissions, as: :likable, dependent: :destroy, class_name: 'Like' 

    alias :liked_comments :liked_submissions 
end 
1

在發現這個問題之後經歷了艱難時期,但得到了很好的解決方案

添加到您的Gemfile

gem 'mongoid-multiple-polymorphic'

這就像一個魅力:

class Resource 

    has_one :icon, as: :assetable, class_name: 'Asset', dependent: :destroy, autosave: true 
    has_one :preview, as: :assetable, class_name: 'Asset', dependent: :destroy, autosave: true 

    end 
相關問題