0

我是 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

当我插入 => "vimal raj, Selvam, 1985-08-30" 但它正在接受以下数据 => "Vimal Raj, selvam, 1985-08-30" 时,它会按预期抛出错误。我期待它会抛出一个错误,但出乎意料的是它接受了记录并作为新记录插入到数据库中。

请帮助我解决这个问题。

4

2 回答 2

2

如果您想要单线解决方案,请尝试以下操作:

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

希望,它会有所帮助。

于 2013-07-21T08:39:24.877 回答
1

我认为 case_sensitive 仅匹配名称,而不匹配父亲名称。我会尝试将 before_save 更改为 before_validation 以便在评估您的验证时 name 和 Father_name 始终保持相同的大小写。

于 2013-07-21T07:04:27.857 回答