我有个人数据库:
First Name
Surname
DOB
我想在添加新数据时避免重复。我想我需要使用find_or_create_by
。有时,DOB
不可用。我想检查这三个,但如果DOB
不可用(即为空),我只想检查Surname
和First Name
。
有可能吗?
答案 0 :(得分:1)
这绝对可能,它可能不是一个方法链。
将查询构建为哈希是我实现您想要的第一种方式。希望这很容易投入模型或控制器而不需要很多更改。
query = { first_name: first_name, surname: surname }
query = query.merge(date_of_birth: date_of_birth) if date_of_birth.present?
individual = Individual.find_or_create_by(query)
答案 1 :(得分:1)
您可以在模型中添加一些验证,例如
class User < ApplicationRecord
validates :first_name, presence: true
validates :first_name, :surname, uniqueness: true, if: Proc.new { |a| a.first_name && a.surname}
validates :first_name, :surname, :date_of_birth, uniqueness: true, if: Proc.new { |a| a.first_name && a.surname && a.date_of_birth}
end