Вот основные настройки:
У меня есть Order
модель. У Order
есть один Address
и он accepts_nested_attributes_for :address
.
У меня есть базовая форма заказа, где я прошу пользователя ввести ее адрес. Это обрабатывается с nested_fields_for
. Все отлично работает - новые адреса проверены и назначены красиво.
Однако проблема в том, что создает новый Address
каждый раз , даже если Address
уже существует с идентичными атрибутами.
Я хотел бы изменить поведение так, чтобы, если введенный пользователем адрес совпадал со всеми атрибутами существующего Address
, порядок назначал существующий Address
самому себе, а не создавал новый один.
Методы, которые я пробовал:
В контроллере попробуйте найти существующую запись адреса с вложенными атрибутами (params[:order][:address_attributes]
). Если совпадение существует, удалите все вложенные атрибуты и замените их на params[:order][:address_id]
.
Ни в коем случае не используйте nested_attributes_for
, а вместо этого переопределите метод address=
в модели, затем просто используйте контроллер для создания нового Address
на основе параметров и затем передайте его модель.
Оба эти решения кажутся различными степенями беспорядка. Может ли кто-нибудь объяснить мне, является ли это обязанностью контролера или модели, и, возможно, предложить элегантный способ сделать это?
Заранее спасибо.