我有三种型号:甲板,老虎机和纸牌。我像这样将它们放在一起...甲板由许多插槽组成,每个插槽包含一张卡,任何一张卡都可以显示在多个不同的插槽中。我以“订单-订单行项目-产品”结构为模型,希望这是有意义的。
无论如何,Decks都有一个称为:deck_type的整数字段,并且假设我想获取某种类型的所有牌组,然后查看其所有牌。我期望能够运行此查询,但是出现未定义方法“ cards”的错误:
Deck.where(:deck_type => 1).cards
要获得所有类型为1的牌组,然后吐出其牌。我建立了一个“甲板上通过插槽有很多卡”的关联,当我在一个卡座上调用“ .cards”时,可以很好地返回卡。
我觉得这应该是一个非常基本的查询-我缺少什么?
预先感谢您的任何见解。
该方法cards
仅适用于一个甲板。因此,以下应该工作:
Deck.where(deck_type: 1).first.cards
在first
将获取1层甲板。
如果您希望卡片属于deck_type 1的卡片组,那么您可以选择以下几种方式:
Deck.where(deck_type: 1).map(&:cards).flatten.uniq
这将cards
在找到的每个牌组上应用该方法,然后获得所有卡。展平将结果放入一维数组中,然后uniq将确保不存在重复项(如果有)。
但是以下操作可能会更快:
deck_ids = Deck.where(deck_type: 1).pluck(:id)
Card.where(deck_id: deck_ids)
我认为假设您的Card模型具有deck_id属性是安全的。从以上内容中,您将仅获取那些在deck_ids变量中具有deck_id的卡。
但是更好的是以下内容,因为它将是一个数据库查询。假设您具有正确的关联设置,则可以执行以下操作:
# replace 'decks' with Deck.table_name if necessary
Card.joins(:deck).where(decks: {deck_type: 1})
我希望最后一个是不言自明的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句