category.rb
has_many :topics
topic.rb
belongs_to :category
has_many :answers
answer.rb
belongs_to :topic
问题:
我如何预先形成Category.first.topics.answers.count
答案 0 :(得分:3)
使用has_many :through
关系:
# Category.rb
has_many :topics
has_many :answers, through: :topics
现在您可以访问所有主题的所有答案,如下所示:
Category.first.answers.count
答案 1 :(得分:1)
如果您在架构配置上设置(即不使用has_many :through
),则需要从Answers
开始并使用几个join
来到{ {1}}
Category
这里我们加入一个嵌套关联,然后使用where子句来过滤Answers.joins(topic: :category).where(categories: { id: category_id })
注意:我认为这是正确的语法,但您可能需要摆弄多个category_id
和topic
那里