Validates_uniqueness_of (with :scope) doesn't seem to work?


#1

I have a master record called ‘project’ and a child record called
‘agycode’. Obviously, agycode has a project_id FK. I wish to make the
“descr” field unique ONLY within the ‘project_id’ ‘scope’. Here are the
key
pieces of information
Agycode fields (id, project_id, descr)

Here’s the declaration in the Agycode.rb
validates_uniqueness_of :descr,
:scope => “project_id”

Here’s the test that SHOULDN’T pass but it does

def test_should_fail_duplicate_descr
record1 = @project.agycodes.new(:descr => “description”)
record2 = record1
assert record1.save, “Save Record”
assert_valid(record1)
assert record2.save, “Save Record”
assert_valid(record2)
end

By the way, do you know how one would write the opposite of
“assert_valid”?
Thank you,
David


#2

You’re saving the same record twice.

The problem line: record2 = record1

This does not do a “deep copy” of record1’s attributes and create a
new object. Instead it just creates a new variable with a reference
to the same object that record1 references.

Try: record2 = record1.clone

Note that “clone” doesn’t copy associations.