选择并选择相同SQL查询但具有不同结果的rails

时间:2016-08-01 11:06:38

标签: ruby-on-rails ruby

我从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>, ...]>

请帮助这对我来说很安静。

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)

您对pluckselect提供的结果格式感到困惑。 pluck返回简单数组中的结果,其中select返回活动记录关系数组。这就是为什么你得到不同格式的结果。

希望它能清除你的怀疑。

pluck的输出:

[[2, 3, 1, 1], [2, 3, 1, 2]..]

select的输出:

#<ActiveRecord::Relation[#<Listing id: 1>, #<Listing id: 2>..]