0

我有模特文章

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

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

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

但它不起作用。

4

2 回答 2

2

您可以简单地使用以下查询:

category = Category.where(:name => 'Author').first
articles = category.articles
于 2013-10-24T07:11:18.267 回答
1

has_and_belongs_to_many 暗示了一个 nn 关系,所以如果你想这样查询它,你真的需要一个逆关系。

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)
于 2013-10-24T07:18:54.820 回答