我是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”。我原以为它会抛出一个错误,但是它意外地接受了记录并作为新记录插入到数据库中。
请帮我解决这个问题。
答案 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始终具有相同的大小写。