在嵌套属性上没有将Symbol隐式转换为Integer

时间:2015-07-16 09:28:41

标签: ruby-on-rails ruby-on-rails-4 nested-attributes strong-parameters

我遇到编辑嵌套属性的问题。我收到此错误:

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

我已经阅读了很多关于大量分配的嵌套属性的帖子,但没有任何作用。 以下是我读过的帖子的一部分。

strong-parameters-permit-all-attributes-for-nested-attributes

rails-4-strong-parameters-nested-objects

whitelisted attributes

当然,我不想做

params.require(:event).permit!

1 个答案:

答案 0 :(得分:4)

你必须改变这个

=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