Обновлять вложенные атрибуты при обновлении и предоставленном идентификаторе - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть модель, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...