diff options
author | Nat Budin <nbudin@patientslikeme.com> | 2014-05-12 14:30:05 -0700 |
---|---|---|
committer | Nat Budin <nbudin@patientslikeme.com> | 2014-05-14 16:18:42 -0700 |
commit | 1d316ac1fd68962782762b02694a1bf9fd4ef44e (patch) | |
tree | a96fd0f01687caf5e8b3e7a9b45fb740663512f5 /activerecord/test/cases/relation | |
parent | eacb4264af7593a41487625d5a7a6f6986c58b47 (diff) | |
download | rails-1d316ac1fd68962782762b02694a1bf9fd4ef44e.tar.gz rails-1d316ac1fd68962782762b02694a1bf9fd4ef44e.tar.bz2 rails-1d316ac1fd68962782762b02694a1bf9fd4ef44e.zip |
Make filter_binds filter out symbols that are equal to strings
ActiveRecord::Relation::Merger's filter_binds method does not filter out bind
variables when one of the attribute nodes has a string name, but the other has
a symbol name, even when those names are actually equal.
This can result in there being more bind variables than placeholders in the
generated SQL. This is particularly an issue for PostgreSQL, where this is
treated as an error.
This patch changes the filter_binds method to make it convert both attribute
names to strings before comparing.
Diffstat (limited to 'activerecord/test/cases/relation')
-rw-r--r-- | activerecord/test/cases/relation/merging_test.rb | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/activerecord/test/cases/relation/merging_test.rb b/activerecord/test/cases/relation/merging_test.rb index 48f45d45b1..7c9543e5ae 100644 --- a/activerecord/test/cases/relation/merging_test.rb +++ b/activerecord/test/cases/relation/merging_test.rb @@ -108,6 +108,11 @@ class RelationMergingTest < ActiveRecord::TestCase merged = left.merge(right) assert_equal post, merged.first end + + def test_merging_compares_symbols_and_strings_as_equal + post = PostThatLoadsCommentsInAnAfterSaveHook.create!(title: "First Post", body: "Blah blah blah.") + assert_equal "First comment!", post.comments.where(body: "First comment!").first_or_create.body + end end class MergingDifferentRelationsTest < ActiveRecord::TestCase |