rails 3验证多个属性的唯一性

den*_*min 176 validation ruby-on-rails

我使用Rails 3.0.0.beta4

我想在独特性上的两个属性添加验证,这意味着我的模型是有效的,如果夫妻的'recorded_at''zipcode'是独一无二的.

这里的一个属性是语法

validates :zipcode, :uniqueness => true
Run Code Online (Sandbox Code Playgroud)

谢谢

Chr*_*yer 328

在Rails 2中,我会写:

validates_uniqueness_of :zipcode, :scope => :recorded_at
Run Code Online (Sandbox Code Playgroud)

在Rails 3中:

validates :zipcode, :uniqueness => {:scope => :recorded_at}
Run Code Online (Sandbox Code Playgroud)

对于多个属性:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}
Run Code Online (Sandbox Code Playgroud)

  • 你会用`validates验证一组三个:zipcode,:uniqueness => {:scope => [:recorded_at,:something_else]}`? (24认同)
  • 我会说从逻辑上讲,你需要`recorded_at`在zipcode范围内是唯一的更有意义.`validate:recorded_at,:uniqueness => {:scope =>:zipcode}` (7认同)
  • 我想补充一点,如果你想在外键上使用`:scope`,你需要使用`:fkey_id`符号,而不是`:fkey`符号,即使"基本"`:uniqueness`适用于`: fkey` (5认同)
  • 你仍然可以使用rails 2方式,除非你在同一个属性上进行多种类型的验证,否则我发现它更具可读性. (2认同)

小智 93

多范围参数:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end
Run Code Online (Sandbox Code Playgroud)

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

这应该回答格雷格的问题.


小智 6

我不工作,需要把范围复数

validates_uniqueness_of :teacher_id, :scope s => [:semester_id, :class_id]