我从rails控制台点击以下查询:
Listing.joins(:colors, :sizes, :product, :orders).pluck('colors.id', 'sizes.id', 'products.id', 'orders.id')
(4.5ms) SELECT colors.id, sizes.id, products.id, orders.id FROM "listings" INNER JOIN "colors" ON "colors"."listing_id" = "listings"."id" INNER JOIN "sizes" ON "sizes"."listing_id" = "listings"."id" INNER JOIN "products" ON "products"."id" = "listings"."product_id" INNER JOIN "orders" ON "orders"."listing_id" = "listings"."id"
和
Listing.joins(:colors, :sizes, :product, :orders).select('colors.id', 'sizes.id', 'products.id', 'orders.id')
Listing Load (4.6ms) SELECT colors.id, sizes.id, products.id, orders.id FROM "listings" INNER JOIN "colors" ON "colors"."listing_id" = "listings"."id" INNER JOIN "sizes" ON "sizes"."listing_id" = "listings"."id" INNER JOIN "products" ON "products"."id" = "listings"."product_id" INNER JOIN "orders" ON "orders"."listing_id" = "listings"."id"
分别得到以下结果:
[[2, 3, 1, 1], [2, 3, 1, 2], [2, 2, 1, 1], [2, 2, 1, 2], [2, 1, 1, 1], [2, 1, 1, 2], [3, 3, 1, 1], [3, 3, 1, 2], [3, 2, 1, 1], [3, 2, 1, 2], [3, 1, 1, 1], [3, 1, 1, 2], [4, 3, 1, 1], [4, 3, 1, 2], [4, 2, 1, 1], [4, 2, 1, 2], [4, 1, 1, 1], [4, 1, 1, 2]]
和
#<ActiveRecord::Relation [#<Listing id: 1>, #<Listing id: 2>, #<Listing id: 1>, #<Listing id: 2>, #<Listing id: 1>, #<Listing id: 2>, #<Listing id: 1>, #<Listing id: 2>, #<Listing id: 1>, #<Listing id: 2>, ...]>
请帮助这对我来说很安静。
答案 0 :(得分:3)
你很困惑使用pluck和select。
选择指定结果集中所需的字段。但它将匹配结果集作为ActiveRecord对象数组返回。
#<ActiveRecord::Relation [#<Listing id: 1>, #<Listing id: 2>, ...
尽管pluck做同样的事情,即它首先使用指定的属性运行select,但是它不是构建ActiveRecord模型,而是仅从结果集中提取这些属性值并将它们放在一个简单的数组中。因此,您只能看到生成的值数组而不是对象数组:
[[2, 3, 1, 1], [2, 3, 1, 2], [2, 2, 1, 1], [2, 2, 1, 2],...
答案 1 :(得分:1)
您对pluck
和select
提供的结果格式感到困惑。 pluck
返回简单数组中的结果,其中select
返回活动记录关系数组。这就是为什么你得到不同格式的结果。
希望它能清除你的怀疑。
pluck
的输出:
[[2, 3, 1, 1], [2, 3, 1, 2]..]
select
的输出:
#<ActiveRecord::Relation[#<Listing id: 1>, #<Listing id: 2>..]