我怎样才能要求" full_name"的唯一性?方法,在我的数据库中使用first_name和last_name?

时间:2015-07-04 12:49:20

标签: ruby-on-rails validation ruby-on-rails-4 activerecord model

用户可以在我的数据库中创建学生。现在我对first_name和last_name的存在进行了模型验证。我的学生模型中有一个full_name的方法。

def full_name
"#{first_name} #{last_name}"
end

我想知道我要做什么需要full_name的唯一性而不限制名字或姓氏。我想能够有汤姆史密斯,汤姆威尔逊,汤姆克兰西,但不是错误的汤姆史密斯再入。

2 个答案:

答案 0 :(得分:3)

这样做

validates_uniqueness_of :first_name, scope: :last_name

您还需要在 学生 表格中添加 唯一索引 ,以避免 < em>竞争条件

add_index :students, [ :first_name, :last_name ], :unique => true

更多信息here

答案 1 :(得分:0)

您可以尝试以下方法吗?

# student.rb
def full_name_uniqueness
     if Student.exists?(first_name: first_name, last_name: last_name)
       errors.add :base, "#{full_name} already exists" #change error key and message as you need
     end
end 

现在编写自定义验证     #student.rb

validates :full_name_uniqueness