문제

In Rails 2.x you can use validations to make sure you have a unique combined value like this:

validates_uniqueness_of :husband, :scope => :wife

In the corresponding migration it could look like this:

add_index :family, [:husband, :wife], :unique => true

This would make sure the husband/wife combination is unique in the database. Now, in Rails 3 the validation syntax changed and the scope attribute seems to be gone. It now looks like:

validates :husband, :presence => true

Any idea how I can achieve the combined validation in Rails 3? The Rails 2.x validations still work in Rails 3 so I can still use the first example but it looks so "old", are there better ways?

도움이 되었습니까?

해결책

Bear with me. The way the validates method in ActiveModel works is to look for a Validator.

:presence => true looks for PresenceValidator and passes the options: true to the validator's initializer.

I think you want

validates :husband, :presence => true, :uniqueness => {:scope => :wife}

(The uniqueness validator is actually part of ActiveRecord, not ActiveModel. It's really interesting how the developers set this up. It's quite elegant.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top