Rails查找记录集合的所有记录

时间:2017-08-15 21:34:12

标签: ruby-on-rails activerecord rails-activerecord

| USER_NAME

对于上面的关联,我需要进行以下查询。

class Post < ActiveRecord::Base
  has_many :categorizations
  has_many :categories, through: :categorizations

class Categorization < ActiveRecord::Base
  belongs_to :category
  belongs_to :post
end

class Category < ActiveRecord::Base
  has_many :categorizations
  has_many :posts, through: :categorizations
end

显然这个查询@posts = Post.includes(:categories).where(active: true) @categories = @posts.categories 不起作用,但我该怎么做?

更新: 以下两个答案我都会收到此错误

@categories = @posts.categories

3 个答案:

答案 0 :(得分:0)

Category班级,添加:

class Category < ActiveRecord::Base
  has_many :categorizations
  has_many :posts, through: :categorizations

然后你可以做类似的事情:

@posts = Post.includes(:categories).where(active: true)
@categories = Category.where(post: @posts)

答案 1 :(得分:0)

在一个查询中:

@categories = Category.joins(:posts).where(posts: { active: true })

答案 2 :(得分:0)

首先你需要声明关系:

Categorization模型中,您需要

belongs_to :post

并在您的Category模型中

has_many :categorizations
has_many :posts, through: :categorizations

如果您忘记了这一点,则活动记录会假设post是一个类别列,因为您从未告诉他这是一种关系