首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取每个带有mongoid的关联记录的计数

获取每个带有mongoid的关联记录的计数
EN

Stack Overflow用户
提问于 2018-07-03 23:56:48
回答 1查看 40关注 0票数 1

假设我有一个汽车模型,有许多关联的模型,一些是has_many,另一些是has_one。

代码语言:javascript
复制
class Car
  include Mongoid::Document

  has_one :steering, class_name: "Car::Steering", autosave: true, dependent: :destroy
  accepts_nested_attributes_for :steering, allow_destroy: true

  has_many :tires, class_name: "Car::Tire", autosave: true, dependent: :destroy
  accepts_nested_attributes_for :tires, allow_destroy: true

  has_many :doors, class_name: "Car::Door", autosave: true, dependent: :destroy
  accepts_nested_attributes_for :doors, allow_destroy: true
end

如何列出每个Car记录并显示每个关联模型记录的计数?

我想返回如下内容:

代码语言:javascript
复制
parts = { steering: 1, doors: 4 }

我知道我可以逐个遍历每个关联并返回计数,但是如果我有100个关联呢?我想让它具有动态性。

编辑:

我可以使用以下命令获取所有关联的has_many和has_one记录的数组

代码语言:javascript
复制
car = Car.first
Car.reflect_on_all_associations(:has_many, :has_one).map(&:name)
 => [:steering, :tires, :doors, ...]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-04 00:40:10

找到了解决方案:

代码语言:javascript
复制
selected_car = Car.first
selected_car.reflect_on_all_associations(:has_many, :has_one)
   .map do |assoc|
     { assoc.name => (car.send(assoc.name).nil? ? 0 : car.send(assoc.name).count) }
   end

如果你有更好,更快,更高效的解决方案,请分享!

更新:

我发现上面的代码有问题。:has_one关联无法计数,并将返回错误。因此,这将会起作用:

代码语言:javascript
复制
one_assoc = selected_car.class.reflect_on_all_associations(:has_one).map { |assoc| selected_car.send(assoc.name).present? ? {assoc.name => 1 } : nil }
many_assoc = selected_car.class.reflect_on_all_associations(:has_many).map { |assoc| selected_car.send(assoc.name).present? ? {assoc.name => selected_car.send(assoc.name).count } : nil }
associations = one_assoc + many_assoc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51158751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档