如何验证由两列组成的名称?

时间:2012-01-18 18:20:49

标签: ruby ruby-on-rails-3 validation

如何通过简单的验证调用或验证方法验证包含两列的名称?

我的名称由两列firstnamesurname组成。仅当firstname + surname唯一时,记录才有效。

如果我添加firstname: "lala la"surname: "le li lo"它是有效的,因为它是唯一的。

如果我输入firstname: "lala"surname: "la le li lo",并且firstnamesurname的串联在两个示例中都相同,则第二个应该无效。

我找不到简单的方法来做到这一点。

我尝试过这样的事情:

validates_uniqueness_of :firstname, :surname, :scope => {:firstname, :surname}

或其组合,但不起作用。

2 个答案:

答案 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"