Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #9430 from authorNari/backport-7072-to-3-2-stable

Backported #7072 to 3-2-stable. Use database value for uniqueness validation scope
  • Loading branch information...
commit 06eb872035a115852d92121c037e3c54a7a10f58 2 parents 0761bb0 + 905b7df
@carlosantoniodasilva carlosantoniodasilva authored
View
6 activerecord/CHANGELOG.md
@@ -1,4 +1,10 @@
## unreleased ##
+* Fixes issue with overrding ActiveRecord reader methods with a
+ composed object and using that attribute as the scope of a
+ validates_uniqueness_of validation.
+ Backport of #7072
+
+ *Peter Brown*
* Sqlite now preserves custom primary keys when copying or altering tables.
Fixes #9367.
View
2  activerecord/lib/active_record/validations/uniqueness.rb
@@ -26,7 +26,7 @@ def validate_each(record, attribute, value)
relation = relation.and(table[finder_class.primary_key.to_sym].not_eq(record.send(:id))) if record.persisted?
Array.wrap(options[:scope]).each do |scope_item|
- scope_value = record.send(scope_item)
+ scope_value = record.read_attribute(scope_item)
relation = relation.and(table[scope_item].eq(scope_value))
end
View
16 activerecord/test/cases/validations/uniqueness_validation_test.rb
@@ -22,6 +22,14 @@ class Conjurer < IneptWizard
class Thaumaturgist < IneptWizard
end
+class ReplyTitle; end
+
+class ReplyWithTitleObject < Reply
+ validates_uniqueness_of :content, :scope => :title
+
+ def title; ReplyTitle.new; end
+end
+
class UniquenessValidationTest < ActiveRecord::TestCase
fixtures :topics, 'warehouse-things', :developers
@@ -80,6 +88,14 @@ def test_validate_uniqueness_with_scope
assert r3.valid?, "Saving r3"
end
+ def test_validate_uniqueness_with_composed_attribute_scope
+ r1 = ReplyWithTitleObject.create "title" => "r1", "content" => "hello world"
+ assert r1.valid?, "Saving r1"
+
+ r2 = ReplyWithTitleObject.create "title" => "r1", "content" => "hello world"
+ assert !r2.valid?, "Saving r2 first time"
+ end
+
def test_validate_uniqueness_scoped_to_defining_class
t = Topic.create("title" => "What, me worry?")
Please sign in to comment.
Something went wrong with that request. Please try again.