1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

allow association as 1st uniqueness validation arg

#4321
This commit is contained in:
Dan Pickett 2012-01-06 19:17:36 -05:00
parent 5f472785fe
commit 3b5fbafab0
2 changed files with 21 additions and 1 deletions

View file

@ -56,7 +56,15 @@ module ActiveRecord
end end
def build_relation(klass, table, attribute, value) #:nodoc: def build_relation(klass, table, attribute, value) #:nodoc:
reflection = klass.reflect_on_association(attribute)
column = nil
if(reflection)
column = klass.columns_hash[reflection.foreign_key]
attribute = reflection.foreign_key
value = value.attributes[reflection.primary_key_column.name]
else
column = klass.columns_hash[attribute.to_s] column = klass.columns_hash[attribute.to_s]
end
value = column.limit ? value.to_s[0, column.limit] : value.to_s if !value.nil? && column.text? value = column.limit ? value.to_s[0, column.limit] : value.to_s if !value.nil? && column.text?
if !options[:case_sensitive] && value && column.text? if !options[:case_sensitive] && value && column.text?

View file

@ -104,6 +104,18 @@ class UniquenessValidationTest < ActiveRecord::TestCase
assert !r2.valid?, "Saving r2 first time" assert !r2.valid?, "Saving r2 first time"
end end
def test_validate_uniqueness_with_object_arg
Reply.validates_uniqueness_of(:topic)
t = Topic.create("title" => "I'm unique!")
r1 = t.replies.create "title" => "r1", "content" => "hello world"
assert r1.valid?, "Saving r1"
r2 = t.replies.create "title" => "r2", "content" => "hello world"
assert !r2.valid?, "Saving r2 first time"
end
def test_validate_uniqueness_scoped_to_defining_class def test_validate_uniqueness_scoped_to_defining_class
t = Topic.create("title" => "What, me worry?") t = Topic.create("title" => "What, me worry?")