diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-11-26 14:52:48 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-11-26 20:54:19 -0200 |
commit | 5fdbec7dd15a8e6edef861899accb8b3b69cc87a (patch) | |
tree | 773aef4aad2122afa76e74409d1d1edd21bd1c5f /activerecord | |
parent | f7e4e37ae756e59da2e10bdeafd9458ef7189582 (diff) | |
download | rails-5fdbec7dd15a8e6edef861899accb8b3b69cc87a.tar.gz rails-5fdbec7dd15a8e6edef861899accb8b3b69cc87a.tar.bz2 rails-5fdbec7dd15a8e6edef861899accb8b3b69cc87a.zip |
Merge pull request #13061 from laurocaetano/fix-uniqueness-validation-for-aliased-attribute
Fix bug when validating the uniqueness of an aliased attribute.
Conflicts:
activerecord/CHANGELOG.md
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/validations/uniqueness.rb | 10 | ||||
-rw-r--r-- | activerecord/test/cases/validations/uniqueness_validation_test.rb | 8 |
3 files changed, 23 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 1e035c11e0..81e48862d4 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* Fix bug when validating the uniqueness of an aliased attribute. + + Fixes #12402. + + *Lauro Caetano* + * Update counter cache on a has_many relationship regardless of default scope Fix #12952. diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb index 38f37f5c8a..e2b132ca81 100644 --- a/activerecord/lib/active_record/validations/uniqueness.rb +++ b/activerecord/lib/active_record/validations/uniqueness.rb @@ -51,7 +51,15 @@ module ActiveRecord value = value.attributes[reflection.primary_key_column.name] unless value.nil? end - column = klass.columns_hash[attribute.to_s] + attribute_name = attribute.to_s + + # the attribute may be an aliased attribute + if klass.attribute_aliases[attribute_name] + attribute = klass.attribute_aliases[attribute_name] + attribute_name = attribute.to_s + end + + column = klass.columns_hash[attribute_name] value = klass.connection.type_cast(value, column) value = value.to_s[0, column.limit] if value && column.limit && column.text? diff --git a/activerecord/test/cases/validations/uniqueness_validation_test.rb b/activerecord/test/cases/validations/uniqueness_validation_test.rb index 71cb9d7b1e..74c696c858 100644 --- a/activerecord/test/cases/validations/uniqueness_validation_test.rb +++ b/activerecord/test/cases/validations/uniqueness_validation_test.rb @@ -63,6 +63,14 @@ class UniquenessValidationTest < ActiveRecord::TestCase assert t2.save, "Should now save t2 as unique" end + def test_validate_uniqueness_with_alias_attribute + Topic.alias_attribute :new_title, :title + Topic.validates_uniqueness_of(:new_title) + + topic = Topic.new(new_title: 'abc') + assert topic.valid? + end + def test_validates_uniqueness_with_nil_value Topic.validates_uniqueness_of(:title) |