2015-07-13 1 views
2

Я уже пробовал идентификатор whitelisting, это не помогает, он создает дубликаты независимо от того, что.Rails 4 создает дубликаты при обновлении вложенных атрибутов

Модель:

accepts_nested_attributes_for :address, :social, :contact, :talent_parameter 

Атрибуты Перехожу:

model_attributes = { 
      talent_parameter_attributes: { 
      }, 
      contact_attributes: { 
       agency_link: base_url + href 
      }, 
      social_attributes: { 
      }, 
      address_attributes: { 
      } 
     } 

     update_model(model, model_attributes) 

Разрешения я предлагаю:

def self.update_model(model, attrs) 
    params = ActionController::Parameters.new(model: attrs) 
    model_params = params.require(:model) 
    model_params = model_params.permit(
     :company, 
     :age, 
     :avatar, 
     :gender, 
     :contact_id, 
     talent_features: [], 
     talent_parameter_attributes: [:id, :weight_lbs, :dress, :shoe, :chest, :waist, :hips, :height_ft], 
     contact_attributes: [:id, :agency_link], 
     social_attributes: [:id] 
    ) 

    model.update(model_params) 
    end 

Я не понимаю. Каждый раз, когда он создает другую копию talent_parameter, contact, social и address. Что может быть не так?

ответ

3

Включенный вами ID для моделей подлежит обновлению? В Rails API, она гласит: «Для каждого хэша, который не имеет ключа ID новая запись будет инстанциируемым» ...

Так попробуйте это:

model_attributes = { 
     talent_parameter_attributes: { 
     }, 
     contact_attributes: { 
      id: 7, 
      agency_link: base_url + href 
     }, 
     social_attributes: { 
     }, 
     address_attributes: { 
     } 
    }