我的Rails应用程序中有两种不同类型的用户(设计)模型。医生和病人。我没有定义上层用户并从中继承属性,这是我的错。它们具有相互属性 - 个人识别号,我想在两个表中检查此属性的两个唯一性。我搜索了一下,看到this answer。
我已经应用了写在那里的东西,但它没有效果。
#patient.rb
class Patient < ActiveRecord::Base
...
validates_uniqueness_of :pin
validate :pin_not_on_doctors
private
def pin_not_on_doctors
Doctor.where(:pin => self.pin).first.nil?
end
end
#doctor.rb
class Doctor < ActiveRecord::Base
...
validates_uniqueness_of :pin
validate :pin_not_on_patients
private
def pin_not_on_patients
Patient.where(:pin => self.pin).first.nil?
end
end
首先,我创建了一个患者实例,然后使用我在第一个(患者)病例中使用的相同针脚的医生实例。 Rails意外地没有吐出错误信息并创建了医生实例,更有趣的是,设计也对重复的电子邮件视而不见。
我该如何克服这个问题?
答案 0 :(得分:1)
您应该在验证功能上添加错误: http://api.rubyonrails.org/classes/ActiveModel/Errors.html
def pin_not_on_doctors
errors.add :pin, "already exists" if Doctor.exists?(:pin => self.pin)
end
答案 1 :(得分:1)
除了添加错误之外,请尝试添加一行以返回true / false,
类似的东西,
def pin_not_on_doctors
errors.add :pin, "already exits" if Doctor.exists?(:pin => self.pin)
Doctor.exists?(:pin => self.pin)
end
我不知道你的应用程序的详细信息,但是根据你在这种情况下实际创建对象的方式,它可能需要它。
编辑:误读原文中的内容,看起来你当前的版本只是返回true / false,所以这可能没有帮助。遗憾。