find_or_create_by有多个条件

时间:2018-06-11 00:23:58

标签: ruby-on-rails

我有个人数据库:

First Name
Surname
DOB

我想在添加新数据时避免重复。我想我需要使用find_or_create_by。有时,DOB不可用。我想检查这三个,但如果DOB不可用(即为空),我只想检查SurnameFirst Name

有可能吗?

2 个答案:

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

Read more