Неявное преобразование Symbol в Integer для вложенных атрибутов

У меня проблемы с редактированием вложенных атрибутов. Я получаю эту ошибку:

no implicit conversion of Symbol into Integer

event.rb:

Class Event < ActiveRecord::Base
  has_many :event_joins, :dependent => :destroy
  accepts_nested_attributes_for :event_joins
end

events_controller.rb:

private
   def event_params
     params.require(:event).permit(event_joins_attributes: [:duration]) 
   end

_form.html.erb:

 =f.fields_for :event_joins_attributes do |a|
    =number_field_tag 'event[event_joins_attributes][duration]'
 end

Если я поменяю params до разрешения с

params[:event][:event_joins_attributes][:duration] = params[:event][:event_joins_attributes][:duration].to_i

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

no implicit conversion of String into Integer

Я прочитал много постов о вложенных атрибутах для массового назначения, но ничего не работает. Вот часть постов, которые я прочитал.

сильные-параметры-разрешение-все-атрибуты-для-вложенных атрибутов

Рельсы-4-сильные-параметры-вложенные-объекты

атрибуты из белого списка

Конечно, я не хочу делать

params.require(:event).permit!

1 ответ

Решение

Вы должны изменить это

=f.fields_for :event_joins_attributes do |a|
   =number_field_tag 'event[event_joins_attributes][duration]'
end

в

=f.fields_for :event_joins do |a|
   =a.number_field :duration
end

Так что вы можете иметь свой event_params без изменений.

Примечание имп:

Также всегда разрешать :id в event_params чтобы обновление работало правильно.

def event_params
  params.require(:event).permit(:id, event_joins_attributes: [:id, :duration]) 
end
Другие вопросы по тегам