params.require()。permit不能按预期工作

我有这个控制器

class PeopleController < ApplicationController def new @person = Person.new @person.phones.new end # this is the action that gets called by the form def create render text: person_params.inspect # @person = Person.new(person_params) # @person.save # redirect_to people_path end def index @person = Person.all end private def person_params params.require(:person).permit(:name, phones_attributes: [ :id, :phone_number ]) end end 

而这个观点

  



当我填写两个表单字段并点击“保存人员”时,我只得到{"name"=>"foo"} – 电话号码似乎消失了。

但是,当我将phones_attributes更改为phones我得到{"name"=>"foo", "phones"=>{"phone_number"=>"123"}} (但这会导致创建function出现问题。

这有什么不对?

请注意,这个问题与那个问题密切相关: accepts_nested_attributes_for:我做错了什么以及这个post: https : //groups.google.com/forum/#!topic / ruby​​onrails-talk / 4RF_CFChua0

您没有在控制器中定义@phones:

  def new @person = Person.new @phones = @person.phones.new end 

终于找到了问题。 在视图中应该有

 <%= form_for @person, url: people_path do |f| %> 

代替

 <%= form_for :person, url: people_path do |f| %> 

@phron说已经在这里: accepts_nested_attributes_for:我做错了什么