find_or_create_by с несколькими условиями - PullRequest
0 голосов
/ 11 июня 2018

У меня есть БД физических лиц:

First Name
Surname
DOB

Я хочу избежать дубликатов при добавлении новых данных.Я думаю, что мне нужно использовать find_or_create_by.Иногда DOB недоступен.Я хочу проверить все три, но если DOB недоступен (т. Е. Равен нулю), я хочу проверить только Surname и First Name.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы можете добавить некоторые проверки, в вашей модели что-то вроде,

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

Подробнее

0 голосов
/ 11 июня 2018

Это определенно возможно, это может быть не одна цепочка методов.

Создание вашего запроса в виде хэша - это первый способ, который мне пришёл в голову, чтобы достичь того, чего вы хотите.Надеюсь, это будет легко добавить в модель или контроллер без особых изменений.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...