“ .where”查询后的活动记录关联

乔纳森·鲍曼(Jonathan Bowman)

我有三种型号:甲板,老虎机和纸牌。我像这样将它们放在一起...甲板由许多插槽组成,每个插槽包含一张卡,任何一张卡都可以显示在多个不同的插槽中。我以“订单-订单行项目-产品”结构为模型,希望这是有道理的。

无论如何,Deck都有一个称为:deck_type的整数字段,并且假设我想获取某种类型的所有牌组,然后查看其所有牌。我期望能够运行此查询,但是出现未定义方法“ cards”的错误:

Deck.where(:deck_type => 1).cards

要获得所有类型为1的牌组,然后吐出自己的牌。我建立了一个“甲板上有许多通过插槽的卡片”的关联,当我在一个甲板上调用“ .cards”时,可以很好地返回卡片。

我觉得这应该是一个非常基本的查询-我想念什么?

预先感谢您的任何见解。

二手烟

该方法cards仅适用于一副牌。因此,以下应该工作:

Deck.where(deck_type: 1).first.cards

first将获取1层甲板。

如果您想要属于卡组类型为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ .where”查询后的活动记录关联

来自分类Dev

Rails活动记录查询与“ exists”的关联

来自分类Dev

Rails活动记录查询与“ exists”的关联

来自分类Dev

Rails活动记录查询嵌套关联是否存在

来自分类Dev

删除关联后如何保存活动记录对象?

来自分类Dev

活动记录关联错误

来自分类Dev

Codeigniter结合where_in和活动记录查询

来自分类Dev

yii活动记录NOT IN查询

来自分类Dev

活动记录联接查询

来自分类Dev

活动记录查询-链接

来自分类Dev

具有关联的活动记录查询中的LIKE运算符

来自分类Dev

Rails - 通过属性在活动记录关联中查找对象而不发出更多查询

来自分类Dev

查询记录及其与sequelize的关联

来自分类Dev

Rails活动记录关联,嵌套模型

来自分类Dev

如何关联她和活动记录模型?

来自分类Dev

活动记录递归多对多关联

来自分类Dev

获取带where条件的关联记录时的Rails N + 1查询问题

来自分类Dev

Laravel 在关联表的最后一条记录上查询 where 子句

来自分类Dev

Rails 4活动记录查询

来自分类Dev

活动记录查询的DRY循环

来自分类Dev

查询数组与活动记录的关系

来自分类Dev

Rails活动记录查询结果

来自分类Dev

Ruby on Rails活动记录查询

来自分类Dev

活动记录中的多个查询

来自分类Dev

活动记录高效查询通过

来自分类Dev

codeigniter活动记录where_in

来自分类Dev

CodeIngiter“ WHERE AND OR”到活动记录

来自分类Dev

编写单个Rails活动记录查询以通过与两个表关联来获取所有项?

来自分类Dev

HABTM孤立记录-活动记录查询?