Validates_uniqueness_of - how to use multiple values for sco


#1

Hi

I’m trying to create a basic test management tool to organise the manual
testing I have to do. I’m working on the results recording module and
have a
problem.

Basically, I want each test result to belong to a test case, a test
environment and a build.

I want to make sure there’s no duplication of results with these 3
properties. If someone tries to enter a new test result for a test thats
already been run on a certain environment with a certain build I want
the
user to be prompted to update the existing result rather than create a
new
one.

In the result model, I know I can use …

validate_uniqueness_of :test_id, :scope => “xxxxx”

… but I need it to be unique for 2 fields (environment and build)

Is there any way to pass 2 values into the scope attribute?

If not can anyone suggest how to update the validate_uniqueness_of
method to
do this?

thanks

Iain


#2

You can do this only using edge(svn) version of Rails. You should pass
an array of scope fields.

Kent


#3

I heard of an upcoming change to validates_uniqueness_of that will
allow for multiple validation, but until then, this should work:

Make sure each (id, environment, build) tuple is unique for model

TestCase
validates_each :test_id, :on => :create do |record, test, value|
if
TestCase.find_by_id_and_environment_and_build(record.attributes[‘id’],
record.attributes[‘environment’], record.attributes[‘build’])
record.errors.add test, “This (id,environment,build) tuble has
already been added”
end
end

– Jeff