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

Имам потребител, който има_много услуги:

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