gpt4 book ai didi

ruby-on-rails - rails : Find relations on relations

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:54 27 4
gpt4 key购买 nike

我真不敢相信,经过 5 年的 Rails 编程,我还没有想出一个好的解决方案来解决这个常见问题。另外,我假设这个特定问题有 100 个答案,但我不知道定义(关系?协会?等)来很好地搜索它。所以我们开始吧:

我有两个模型:Categories 和 Products 以及一个 CategoryProductRelation 模型将它们联系在一起。

类别模型:

has_many :category_product_relations
has_many :products, :through => :category_product_relations

类别产品关系模型:

has_many :products
has_many :categories

类别通常有大约 1000 种产品。

问题

我经常需要搜索“食品类别中的所有产品”,即类别:“水果”(1)、“ Cereal ”(2)、“肉类”(3)。

基本上,我喜欢做的是类似Category.where(:id => [1,2,3]).products 的事情,这显然不是'不工作。

我的(慢)解决方案

我经常做的事情是这样的:

products = Product.where(:id => CategoryProductRelation.where(:category_id => [1,2,3]).pluck(:product_id))

哪个有效,大部分也很好。但是,如果产品数量很大导致查询需要 400 毫秒,这会非常慢!

必须有更聪明的方法,对吧?这感觉就像 Rails 101,但我无法以简单且快速的方式弄明白!

最后,像这样遍历 Category:

Category.where(:id => [1,2,3]).each do |category|
category.products
#...and so on
end

似乎同样慢。

是否有解决这个常见问题的 Elixir ?

最佳答案

合并怎么样?

Product.joins(:categories).merge(Category.where(:id => [1,2,3])).pluck(:id)

http://apidock.com/rails/ActiveRecord/SpawnMethods/merge

Merges in the conditions from other, if other is an ActiveRecord::Relation

关于ruby-on-rails - rails : Find relations on relations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34760842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com