У меня есть модель, Report, которая имеет _many Features и accept_nested_attrubutes_for Features.
Class Report < ApplicationRecord
has_many :features, dependent: :destroy
accepts_nested_attributes_for :features
def features_attributes=(features_attributes)
features_attributes.each do |feature_attributes|
f = Feature.by_id_or_map_linkage(feature_attributes)
if f
f.update_attributes(feature_attributes)
else
f = Feature.create(feature_attributes)
end
self.features << f
end
end
end
Я добавил метод, который проверяет, существует ли эта функция. Я делаю эту проверку по map_linkage или id, потому что они являются уникальными полями в таблице объектов.
Это работает, но ужасно. Эта логика должна быть в модели Feature - вложенные атрибуты, включающие одно из идентифицирующих полей, должны инициировать обновление, а не создание.
Как я могу это сделать? Такое ощущение, что это, вероятно, простой параметр, о котором я не знаю, или простой рефакторинг для модели компонентов, который будет проще поддерживать и избежать дублирования в других контроллерах, которые обновляют компоненты с помощью nested_attributes.