has_many Вложенные атрибуты в Rails 4 (сохранение нескольких объектов с сильными параметрами)

У меня есть пользователь, который has_many services:

class User < ActiveRecord::Base
  has_many :services
  accepts_nested_attributes_for :services, :reject_if => lambda { |s| s[:name].blank? }, :allow_destroy => true
end

Вот мои действия контроллера (разработка)

def new
  build_resource({})
  5.times { resource.services.build }
  ...
end

def create
  build_resource(sign_up_params)
  resource.services.build(sign_up_params[:services_attributes])
  ...
end

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit(:email, :password, :password_confirmation,
    services_attributes: [:name])
  end
end

Когда я отправляю свою форму, вот связанный хэш параметров:

{...,
 "services_attributes"=>{
   "0"=>{"name"=>"Test"},
   "1"=>{"name"=>""},
   "2"=>{"name"=>""},
   "3"=>{"name"=>""},
...}

Дает мне следующую ошибку:

unknown attribute: 0

В этом случае я не знаю, как сохранить несколько объектов с сильными параметрами. У меня есть идея сделать что-то вроде этого:

в моем методе создания:

resource.services.build(sign_up_params[:services_attributes][:id])

Он сохраняет объекты, но меня это не устраивает... Спасибо за объяснение!


person benoitr    schedule 04.12.2013    source источник


Ответы (1)


Должно быть только:

def create
  build_resource(sign_up_params)
  ...
end
person benoitr    schedule 21.12.2013
comment
Ваше решение только для Devise? Я столкнулся с той же проблемой. - person Dex; 19.02.2014