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

时间:2016-05-25 21:51:56

标签: ruby-on-rails ruby ruby-on-rails-5 database-relations

category.rb

  has_many :topics

topic.rb

belongs_to :category
has_many :answers

answer.rb

belongs_to :topic

问题:

我如何预先形成Category.first.topics.answers.count

等查询

2 个答案:

答案 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_idtopic那里