RAILS:关系(Select 所有主题的所有答案)

RAILS: Relations (Select all answers from all topics)

category.rb

  has_many :topics

topic.rb

belongs_to :category
has_many :answers

answer.rb

belongs_to :topic

问题:

我如何执行 Category.first.topics.answers.count

这样的查询

使用 has_many :through 关系:

# Category.rb
has_many :topics
has_many :answers, through: :topics

现在您可以像这样访问所有主题的所有答案:

Category.first.answers.count

如果您在架构配置上进行了设置(即不使用 has_many :through),您会希望从 Answers 开始并利用几个 join 来获得至 Category

Answers.joins(topic: :category).where(categories: { id: category_id })

这里我们加入一个嵌套关联,然后使用 where 子句通过 category_id

过滤掉

注意:我认为这是正确的语法,但您可能需要 fiddle 周围有多个 topiccategory