Простым решением может быть использование метода ActiveRecord#find_or_create_by
, который возвращает существующую запись или генерирует новую, если она еще не существует:
Data.find_or_create_by(phone_number: params["phone_number"], adress: params["adress"])
Обратите внимание, что нет необходимо использовать интерполяцию строк ("#{ ... }"
) в этом случае. Или даже короче:
Data.find_or_create_by(params.permit(:phone_number, :adress))
Но когда вам действительно нужно убедиться, что в базе данных никогда не будет одинаковых записей, вы должны убедиться, что и в модели, и в базе данных тоже.
Я предлагаю добавить 1014 * подтверждение к модели
# in app/models/data.rb
validates :phone_number, uniqueness: { scope: :adress, case_sensitive: false }
и уникальный индекс к базе данных
add_index :datas, [:phone_number, :adress], unique: true
Сочетание проверки и индекса гарантирует, что вы не сможете получить дубликаты в базе данных, даже если вы забудете использовать find_or_create
в другом контроллере или импортировать данные в базу данных через другой канал. .