Rails 4嵌套表单 – 没有将Symbol隐式转换为Integer

在我的rails 4 app中,我有一个三重嵌套路线:

devise_for :users do resources :foo do resources :marflar end end 

我有一个用于创建带有嵌入式Marflar对象的新Foo的表单:

        

但是当我提交表格时,我得到:

 TypeError in FoosController#create no implicit conversion of Symbol into Integer 

我的Foo控制器的相关部分如下所示:

 def new @foo = current_user.foos.build @foo.marflars.build end def create @foo = Foo.new(foo_params) if @foo.save redirect_to @foo else render action: 'new' end end .. def foo_params params.require(:foo).permit(:foo_attr, marflars_attributes: [:marflar_attr]) end 

我的模型正如您所期望的那样:

 class Foo < ActiveRecord::Base belongs_to :user has_many :marflars, dependent: :destroy accepts_nested_attributes_for :marflars, allow_destroy: true end class Marflar < ActiveRecord::Base belongs_to :foo end 

为什么这不起作用? 这让我疯了。 我正在考虑切换到表单对象,但我想先让它工作。

您的fields_for电话应该是公正的

 <%= f.fields_for :marflars do |marflars_form| %> <%= marflars_form.text_field :marflar_attr %> <% end %> 

Rails负责嵌套属性所期望的参数命名约定。