Неявное преобразование 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