Sql Rails-与ActiveRecord的深度嵌套连接

Sql Rails-与ActiveRecord的深度嵌套连接,sql,ruby-on-rails,rails-activerecord,Sql,Ruby On Rails,Rails Activerecord,我偶尔需要在我的应用程序中执行一个跨越多个表的连接,但对于3个以上的表,我还没有完全弄清楚如何执行此操作: class Store < ApplicationRecord has_many :products end class Product < ApplicationRecord belongs_to :store has_many :product_variants end class ProductVariant < ApplicationRecord

我偶尔需要在我的应用程序中执行一个跨越多个表的连接,但对于3个以上的表,我还没有完全弄清楚如何执行此操作:

class Store < ApplicationRecord
  has_many :products
end

class Product < ApplicationRecord
  belongs_to :store
  has_many :product_variants
end

class ProductVariant < ApplicationRecord
  belongs_to :product
  has_many :order_list_items
end

class OrderListItem < ApplicationRecord
  belongs_to :product_variant
  has_many :consumers
end

class Consumer < ApplicationRecord
  belongs_to :order_list_item
end
我现在想做的是加入属于OrderListItem的每个消费者

但是,当我尝试以下操作时:

Store.joins(products: [{ product_variants: :order_list_items }], order_list_items: [:consumers])
我得到一个错误:

(Object doesn't support #inspect)
以下两次尝试也会导致相同的错误:

Store.joins(products: [{ product_variants: :order_list_items }, order_list_items: [:consumers]])
我已正确设置关联,并且
订单列表项目。消费者
消费者。订单列表项目
订单列表项目。产品变体
以及
产品变体。订单列表项目
工作正常

我也没有在任何型号上覆盖
初始化

工作SQL如下所示:

SELECT stores.id, products.id as product_id, product_variants.id as product_variant_id, order_list_items.id as list_item_id, consumers.id as consumer_id
FROM stores
INNER JOIN products ON products.store_id = stores.id
INNER JOIN product_variants on product_variants.product_id = products.id
INNER JOIN order_list_items on order_list_items.product_variant_id = product_variants.id
INNER JOIN consumers on consumers.order_list_item_id = order_list_items.id;
谢谢你的建议。

试试这个

Store.joins(products: [product_variants: [order_list_items: :consumers]])
下面是sql查询

SELECT "stores".* FROM "stores" 
INNER JOIN "products" 
ON "products"."store_id" = "stores"."id" 
INNER JOIN "product_variants" 
ON "product_variants"."product_id" = "products"."id" 
INNER JOIN "order_list_items" 
ON "order_list_items"."product_variant_id" = "product_variants"."id" 
INNER JOIN "consumers" 
ON "consumers"."order_list_item_id" = "order_list_items"."id";

添加product_变体模型的关联谢谢,我一定是忽略了它。我已将其添加到我的描述中。您是否尝试过类似的
商店。加入(产品:[product\u variants:[order\u list\u items::consumers]])
Store.joins(products: [product_variants: [order_list_items: :consumers]])
SELECT "stores".* FROM "stores" 
INNER JOIN "products" 
ON "products"."store_id" = "stores"."id" 
INNER JOIN "product_variants" 
ON "product_variants"."product_id" = "products"."id" 
INNER JOIN "order_list_items" 
ON "order_list_items"."product_variant_id" = "product_variants"."id" 
INNER JOIN "consumers" 
ON "consumers"."order_list_item_id" = "order_list_items"."id";