查找包含一些独特子项的父文档

时间:2013-10-24 07:02:48

标签: ruby-on-rails mongoid

我有模型文章

class Article
  include Mongoid::Document
  has_and_belongs_to_many :categories, inverse_of: nil
end

我有模型类别

class Category
  include Mongoid::Document
  field :name, type: String  
end

我有一些类别,名称为AuthorSecurityMobile等。 如何查找category.name == 'Author'的所有文章? 我试试这个:

Article.where(categories: [name: 'Author'])

但它不起作用。

2 个答案:

答案 0 :(得分:2)

您只需使用以下查询:

category = Category.where(:name => 'Author').first
articles = category.articles

答案 1 :(得分:1)

has_and_belongs_to_many意味着一个n-n关系,所以如果你想这样查询,你真的需要一个反向关系。

class Article
  include Mongoid::Document
  has_and_belongs_to_many :categories
end

class Category
  include Mongoid::Document
  field :name, :type => String
  has_and_belongs_to_many :articles
end

现在你可以这样做:

Category.where(:name => 'Author').first.articles

或者,您可以将类别存储在文章本身的数组中

class Article
  include Mongoid::Document
  field :categories, :type => Array, :default => []
end

然后你可以这样做

Article.in(:categories => 'Author')

如果你真的无法改变你的模特,试试这个:

author_category = Category.where(:name => 'Author').first
Article.in(:category_ids => author_category.id)