Rails 3 validates_uniqueness_of以意想不到的方式工作

时间:2013-07-21 06:17:40

标签: ruby-on-rails

我是RoR的新手。使用validates_uniqueness_of时我遇到了问题。我有一个包含3列的表格:

name      || father_name || dob
Vimal Raj || Selvam      || 1985-08-30

我的模型中的代码是这样的:

class Candidate < ActiveRecord::Base
   attr_accessible :dob, :father_name, :name
   validates_uniqueness_of :name, scope: [:father_name, :dob], case_sensitive: false,
                           message: ": %{value} already present in the database!!!"
   before_save :capitalize_name, :capitalize_father_name

   private

   def capitalize_name
      self.name.capitalize!
   end

   def capitalize_father_name
      self.father_name.capitalize!
   end
end

当我插入=&gt;时,它会按预期抛出错误“vimal raj,Selvam,1985-08-30” 但它接受以下数据=&gt; “Vimal Raj,selvam,1985-08-30”。我原以为它会抛出一个错误,但是它意外地接受了记录并作为新记录插入到数据库中。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

如果您需要单线解决方案,请尝试以下方法:

before_validation lambda {self.name.capitalize!; self.father_name.capitalize!}

希望,这会有所帮助。

答案 1 :(得分:1)

我认为case_sensitivity只匹配name,而不是father_name。我会尝试将before_save更改为before_validation,以便在评估验证时,name和father_name始终具有相同的大小写。