Ruby on rails Rails 3以一种意想不到的方式验证作品的唯一性
我是新来的罗。我在使用validates\u university\u时遇到了一个问题。我有一个包含3列的表:Ruby on rails Rails 3以一种意想不到的方式验证作品的唯一性,ruby-on-rails,Ruby On Rails,我是新来的罗。我在使用validates\u university\u时遇到了一个问题。我有一个包含3列的表: name || father_name || dob Vimal Raj || Selvam || 1985-08-30 我的模型中有这样一个代码: class Candidate < ActiveRecord::Base attr_accessible :dob, :father_name, :name validates_uniqueness
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”。我原以为它会抛出一个错误,但没想到它会接受该记录并将其作为新记录插入数据库
请帮助我解决这个问题。我认为区分大小写只与姓名匹配,而与父亲姓名不匹配。我会尝试将“保存前”更改为“验证前”,以便在评估验证时,名称和父名称的大小写保持一致。我认为区分大小写仅在名称上匹配,而不是在父名称上匹配。我会尝试将“保存前”更改为“验证前”,以便在评估验证时,名称和父名称的大小写保持一致。如果需要一行解决方案,请尝试以下操作:
before_validation lambda {self.name.capitalize!; self.father_name.capitalize!}
希望,这会有所帮助。如果您想要单行解决方案,请尝试以下方法:
before_validation lambda {self.name.capitalize!; self.father_name.capitalize!}
希望,这会有所帮助。无论发生什么情况,作用域似乎都区分大小写-不区分大小写似乎只影响
:name
的唯一性问题,而不影响范围。我不确定我是否会称之为惊喜,但如果有办法做到这一点,那就太好了。请先编辑您的问题,在上面您写道,您的表中有字段名、名字和dob,而不是父亲名。我很抱歉。我已经编辑了我的问题。无论发生什么情况,范围似乎都区分大小写-不区分大小写似乎只影响:name
的唯一性问题,而不影响范围。我不确定我是否会称之为惊喜,但如果有办法做到这一点,那就太好了。请先编辑您的问题,在上面您写道,您的表中有字段名、名字和dob,而不是父亲名。我很抱歉。我已经编辑了我的问题,效果很好。谢谢Rails,伙计,工作很有魅力。谢谢你,伙计。