如何根据rails中外键对象的属性过滤集合

时间:2016-12-20 06:25:52

标签: ruby-on-rails

我有一组Card对象,每张卡属于一个Deck对象,每个Deck都有一个"主题"属性。如何查询属于具有"随意"

主题属性的牌组的所有牌

在django中,它将是,

Card.objects.filter(deck__topic="casual")

我如何在rails中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以使用带连接的内联接表:

Card.joins(:deck).where('decks.topic = ?', 'casual')

您也可以在这里使用哈希语法:

Card.joins(:deck).where(decks: { topic: 'casual' })

请注意where子句中的套牌是复数。

答案 1 :(得分:1)

  

如何查询属于主题属性为“休闲”的牌组的所有牌?

根据问题,您在card.rb中的关联看起来像是:

belongs_to :deck

您想要获取所有cards,即您在LEFT OUTER JOINCard之间寻找Deck,而includes可以为您做同样的事情。

includes还可以帮助您急切加载关联,因此当您从以下联接的结果中访问Deck模型属性时,您不必执行其他查询:

Card.includes(:deck).where(decks: {topic: 'casual'})
希望它有所帮助!