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
on 2007-05-06 16:12
on 2007-05-06 17:18
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.