diff options
author | Yves Senn <yves.senn@gmail.com> | 2015-08-20 12:07:02 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2015-08-20 12:07:02 +0200 |
commit | 50e4afff209ee6dcb50938b59bff32255a3f543e (patch) | |
tree | f1635d410e49db8db35ce86fbd5af9e83b3a23a1 /activerecord/test/cases/validations | |
parent | 013dd756e1ca730d95f13f334e02470ce528354b (diff) | |
download | rails-50e4afff209ee6dcb50938b59bff32255a3f543e.tar.gz rails-50e4afff209ee6dcb50938b59bff32255a3f543e.tar.bz2 rails-50e4afff209ee6dcb50938b59bff32255a3f543e.zip |
uniqueness validation raises error for persisted record without pk.
Closes #21304.
While we can validate uniqueness for record without primary key on
creation, there is no way to exclude the current record when
updating. (The update itself will need a primary key to work correctly).
Diffstat (limited to 'activerecord/test/cases/validations')
-rw-r--r-- | activerecord/test/cases/validations/uniqueness_validation_test.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/activerecord/test/cases/validations/uniqueness_validation_test.rb b/activerecord/test/cases/validations/uniqueness_validation_test.rb index ceca2c8366..7502a55391 100644 --- a/activerecord/test/cases/validations/uniqueness_validation_test.rb +++ b/activerecord/test/cases/validations/uniqueness_validation_test.rb @@ -4,6 +4,7 @@ require 'models/reply' require 'models/warehouse_thing' require 'models/guid' require 'models/event' +require 'models/dashboard' class Wizard < ActiveRecord::Base self.abstract_class = true @@ -446,4 +447,26 @@ class UniquenessValidationTest < ActiveRecord::TestCase key2.key_number = 10 assert_not key2.valid? end + + def test_validate_uniqueness_without_primary_key + klass = Class.new(ActiveRecord::Base) do + self.table_name = "dashboards" + + validates_uniqueness_of :dashboard_id + + def self.name; "Dashboard" end + end + + abc = klass.create!(dashboard_id: "abc") + assert klass.new(dashboard_id: "xyz").valid? + assert_not klass.new(dashboard_id: "abc").valid? + + abc.dashboard_id = "def" + + e = assert_raises ActiveRecord::UnknownPrimaryKey do + abc.save! + end + assert_match(/\AUnknown primary key for table dashboards in model/, e.message) + assert_match(/Can not validate uniqueness for persisted record without primary key.\z/, e.message) + end end |