提交 fcec068b 编写于 作者: M Matthew Draper

Merge pull request #23887 from jrafanie/fix_uniqueness_validation_on_after_create

Fix uniqueness validation with an after_create hook.
......@@ -18,7 +18,7 @@ def validate_each(record, attribute, value)
relation = build_relation(finder_class, table, attribute, value)
if record.persisted?
if finder_class.primary_key
relation = relation.where.not(finder_class.primary_key => record.id_was)
relation = relation.where.not(finder_class.primary_key => record.id_was || record.id)
else
raise UnknownPrimaryKey.new(finder_class, "Can not validate uniqueness for persisted record without primary key.")
end
......
......@@ -53,6 +53,14 @@ class CoolTopic < Topic
validates_uniqueness_of :id
end
class TopicWithAfterCreate < Topic
after_create :set_author
def set_author
update_attributes!(:author_name => "#{title} #{id}")
end
end
class UniquenessValidationTest < ActiveRecord::TestCase
INT_MAX_VALUE = 2147483647
......@@ -469,6 +477,16 @@ def test_validate_uniqueness_ignores_itself_when_primary_key_changed
assert t.save, "Should still save t as unique"
end
def test_validate_uniqueness_with_after_create_performing_save
TopicWithAfterCreate.validates_uniqueness_of(:title)
topic = TopicWithAfterCreate.create!(:title => "Title1")
assert topic.author_name.start_with?("Title1")
topic2 = TopicWithAfterCreate.new(:title => "Title1")
refute topic2.valid?
assert_equal(["has already been taken"], topic2.errors[:title])
end
def test_validate_uniqueness_uuid
skip unless current_adapter?(:PostgreSQLAdapter)
item = UuidItem.create!(uuid: SecureRandom.uuid, title: 'item1')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册