问题描述
我正在使用带有蒙古型的滑轨
Class Attachment
scope :documents,-> { where(is_document: true) }
我想在具有此特定范围的另一个模型上创建关系。 以下内容不起作用,它会获取所有附件,而不仅仅是文档
has_many :documents,class_name: 'Attachment',foreign_key: :user_id do
-> { documents }
end
has_many :documents,-> { documents },foreign_key: :user_id
ArgumentError: wrong number of arguments (given 3,expected 1..2)
解决方法
还有一种更好的方法-只需创建不同类型的文档,并通过继承将它们存储在同一集合中即可。
class Attachment
include Mongoid::Document
end
class Document < Attachment
end
请记住,Mongodb是基于文档的,您可以在一个集合中存储多种类型的文档。
这使您可以像查询Document.all
一样转储臭臭的布尔值和范围。
建立关联也很简单:
class User
include Mongoid::Document
has_many :documents
end
,
请参见https://github.com/nviennot/nobrainer/issues/115#issuecomment-69365980
has_many :documents,class_name: 'Attachment',foreign_key: :user_id,:scope => -> { from_true_document }
在“附件”类中执行以下操作:
Class Attachment
def self.from_true_document
where(is_document: true)
end