如何通过简单的验证调用或验证方法验证包含两列的名称?
我的名称由两列firstname
和surname
组成。仅当firstname + surname
唯一时,记录才有效。
如果我添加firstname: "lala la"
,surname: "le li lo"
它是有效的,因为它是唯一的。
如果我输入firstname: "lala"
,surname: "la le li lo"
,并且firstname
和surname
的串联在两个示例中都相同,则第二个应该无效。
我找不到简单的方法来做到这一点。
我尝试过这样的事情:
validates_uniqueness_of :firstname, :surname, :scope => {:firstname, :surname}
或其组合,但不起作用。
答案 0 :(得分:3)
firstname =“lalla”,surname =“leli”
和
firstname =“la”,surname =“llaleli”不同,所以验证后无法验证它
validates :surname, :uniqueness => { :scope => :firstname }
试试这个
想法是计算全名(在回调中像before_validation)并将其存储在表中(所以你需要另一列)现在在该列上添加验证
before_validation :compute_fullname
validates :fullname, :uniqueness => true
def compute_fullname
fullname = (first_name+surname).replace ' ','' #i don't like gusb you can try it too
end
答案 1 :(得分:2)
试试这个:
validates :surname, :uniqueness => { :scope => :firstname }
validates :firstname, :uniqueness => { :scope => :surname }
编辑:可以使用validates_with完成,但如果要根据以下问题测试边缘情况,请注意性能:
firstname: "lala la", surname: "le li lo"
是重复的:
firstname: "lala", surname: "la le li lo"