我不知道如何正确使用标题,所以让我来解释一下。
我有我的课喜欢:
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"one_answers"liked_comments"。当我像上面那样使用它时,我在尝试为提交创建一个赞时会得到错误:Ambiguous relations :liked_submissions, :liked_comments defined on User.
。
我环顾四周,发现了一个Github问题,上面说这可能不可能,但我再也找不到这个问题了,我甚至不确定它是否与这个问题有关。
这有可能吗?如果没有,有什么建议可以绕过它吗?我也想在BlogPost模型中使用点赞,但如果这不起作用,我必须找到另一种方法。
提前谢谢。
我试过了,它使用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_submissions
和user.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
发现这个问题后遇到了困难,但得到了很酷的解决方案,可以
添加到您的Gemfile
宝石多晶型
这就像一种魅力:
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