aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2014-12-11 13:25:22 -0700
committerSean Griffin <sean@seantheprogrammer.com>2014-12-11 13:25:22 -0700
commit387065a023b3883576a581af79b0a202bdcc07a8 (patch)
tree629ef553db01f2e074a4375408dae26868923d20 /activerecord/test
parentaec7ee479ce99b7174ac34a5d203c6d91376ac89 (diff)
parentbd0d47eed6d88184cd9209b12f853f06b15de48a (diff)
downloadrails-387065a023b3883576a581af79b0a202bdcc07a8.tar.gz
rails-387065a023b3883576a581af79b0a202bdcc07a8.tar.bz2
rails-387065a023b3883576a581af79b0a202bdcc07a8.zip
Merge pull request #17994 from mfazekas/pluck-bind-values-master
Fix ProtocolViolation/bind message for polymorphic + pluck or group+calc
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/calculations_test.rb24
1 files changed, 24 insertions, 0 deletions
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