From bd0d47eed6d88184cd9209b12f853f06b15de48a Mon Sep 17 00:00:00 2001 From: Miklos Fazkeas Date: Tue, 9 Dec 2014 15:20:22 +0100 Subject: Fix ProtocolViolation/bind message supplies for polymorphic + pluck or group --- activerecord/test/cases/calculations_test.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb index e886268a72..1264251418 100644 --- a/activerecord/test/cases/calculations_test.rb +++ b/activerecord/test/cases/calculations_test.rb @@ -10,6 +10,7 @@ require 'models/reply' require 'models/minivan' require 'models/speedometer' require 'models/ship_part' +require 'models/treasure' class NumericData < ActiveRecord::Base self.table_name = 'numeric_data' @@ -609,4 +610,27 @@ class CalculationsTest < ActiveRecord::TestCase .pluck('topics.title', 'replies_topics.title') assert_equal expected, actual end + + def test_calculation_with_polymorphic_relation + sp = ShipPart.create! name: "no trinket" + sp_with_trinket = ShipPart.create! name: "has_trinket" + sp_with_trinket.trinkets.create! + ship_parts = [sp.id,sp_with_trinket.id] + + sp_with_trinket_relation = ShipPart.where(id:ship_parts).joins(:trinkets) + sp_with_trinket_relation2 = sp_with_trinket_relation.where(name:"has_trinket") + sp_with_trinket_relation3 = sp_with_trinket_relation.where(treasures: {looter_type:"ShipPart"}) + sp_with_trinket_relation4 = ShipPart.where(id:ship_parts).eager_load(:trinkets).where.not(treasures:{id:nil}) + + [sp_with_trinket_relation,sp_with_trinket_relation2, + sp_with_trinket_relation3,sp_with_trinket_relation4].each do |with_trinket_rel| + assert_equal 1, with_trinket_rel.count + assert_equal [sp_with_trinket.id], with_trinket_rel.pluck(:id) + assert_equal sp_with_trinket.id, with_trinket_rel.sum(:id) + assert_equal ({"has_trinket" => sp_with_trinket.id}), with_trinket_rel.group('ship_parts.name').sum(:id) + assert_equal ({"has_trinket" => sp_with_trinket.id}), with_trinket_rel.where(id:sp_with_trinket.id). + group('ship_parts.name').sum(:id) + end + end + end -- cgit v1.2.3