蒙古族与范围有很多关系

问题描述

我正在使用带有蒙古型的滑轨

我有一个带范围的模型

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