diff options
author | Evgeny Li <exaspark@gmail.com> | 2013-11-05 18:36:48 +0400 |
---|---|---|
committer | Evgeny Li <exaspark@gmail.com> | 2013-11-22 22:22:34 +0400 |
commit | c449a74e8944eed75453963288ea7a8652f5ba93 (patch) | |
tree | e4c490f06fe5714c523a93b839a2e7d1c9352bb8 /activerecord | |
parent | 34c08d2ead9360e1d9577dbc491d221ab66a2151 (diff) | |
download | rails-c449a74e8944eed75453963288ea7a8652f5ba93.tar.gz rails-c449a74e8944eed75453963288ea7a8652f5ba93.tar.bz2 rails-c449a74e8944eed75453963288ea7a8652f5ba93.zip |
Fix validation on uniqueness of empty association
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/validations/uniqueness.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/validations/uniqueness_validation_test.rb | 19 |
3 files changed, 24 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 4a9022e66b..43651c9b48 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Fix validation on uniqueness of empty association. + + *Evgeny Li* + * Make `ActiveRecord::Relation#unscope` affect relations it is merged in to. *Jon Leighton* diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb index b55af692d6..38f37f5c8a 100644 --- a/activerecord/lib/active_record/validations/uniqueness.rb +++ b/activerecord/lib/active_record/validations/uniqueness.rb @@ -48,7 +48,7 @@ module ActiveRecord def build_relation(klass, table, attribute, value) #:nodoc: if reflection = klass.reflect_on_association(attribute) attribute = reflection.foreign_key - value = value.attributes[reflection.primary_key_column.name] + value = value.attributes[reflection.primary_key_column.name] unless value.nil? end column = klass.columns_hash[attribute.to_s] diff --git a/activerecord/test/cases/validations/uniqueness_validation_test.rb b/activerecord/test/cases/validations/uniqueness_validation_test.rb index 56d8db0be9..71cb9d7b1e 100644 --- a/activerecord/test/cases/validations/uniqueness_validation_test.rb +++ b/activerecord/test/cases/validations/uniqueness_validation_test.rb @@ -35,6 +35,11 @@ class Employee < ActiveRecord::Base validates_uniqueness_of :nicknames end +class TopicWithUniqEvent < Topic + belongs_to :event, foreign_key: :parent_id + validates :event, uniqueness: true +end + class UniquenessValidationTest < ActiveRecord::TestCase fixtures :topics, 'warehouse-things', :developers @@ -376,4 +381,18 @@ class UniquenessValidationTest < ActiveRecord::TestCase assert_equal ["has already been taken"], e2.errors[:nicknames], "Should have uniqueness message for nicknames" end end + + def test_validate_uniqueness_on_existing_relation + event = Event.create + assert TopicWithUniqEvent.create(event: event).valid? + + topic = TopicWithUniqEvent.new(event: event) + assert_not topic.valid? + assert_equal ['has already been taken'], topic.errors[:event] + end + + def test_validate_uniqueness_on_empty_relation + topic = TopicWithUniqEvent.new + assert topic.valid? + end end |