Ruby on rails params.require()。许可证未按预期工作

Ruby on rails params.require()。许可证未按预期工作,ruby-on-rails,ruby,nested-forms,nested-attributes,Ruby On Rails,Ruby,Nested Forms,Nested Attributes,我有这个控制器 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 #

我有这个控制器

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
class PeopleController
而这一观点

<%= form_for :person, url: people_path do |f| %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>

  <%= f.fields_for :phones do |f_phone| %>
    <div class="field">
      <p>
        <%= f_phone.label :phone_number %><br />
        <%= f_phone.text_field :phone_number %>
      </p>
    </div>
    <% end %>

  <p>
    <%= f.submit %>
  </p>
<% end %>




当我填写两个表单字段并点击“Save Person”时,我只得到
{“name”=>“foo”}
-电话号码似乎消失了

但是,当我将
phones\u属性
更改为
phones
时,我会得到
{“name”=>“foo”,“phones”=>{“phone\u number”=>“123”}}
(但是这会导致create函数出现问题)

这里怎么了


请注意,这个问题与那个问题以及这个帖子密切相关:

控制器中没有定义@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已经说过了:

我是否需要手机的实例变量?但是,这不会使控制器保存手机号。如果您希望视图能够访问该实例变量,则需要使实例变量在控制器中可用。当您为:phones
f.fields\u时,这意味着使用
@phones
实例变量。好的,我不知道在,谢谢。但是,我认为在这种情况下,
def new
甚至没有被触摸,但是
render text:person_params.inspect
不会返回我输入的数字。
def new
在你启动对象时被触摸。但是你是正确的,当你的操作被调用时,你需要再次从数据库加载它。你没有指示控制器中的哪个操作正在呈现有问题的窗体。我猜您没有试图在视图中显示当前值。
params[]
中返回了什么?