【问题标题】:params.require().permit does not work as expectedparams.require().permit 没有按预期工作
【发布时间】:2013-07-12 19:35:50
【问题描述】:

我有这个控制器

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

还有这个观点

<%= 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 %>

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

但是,当我将 phones_attributes 更改为 phones 时,我得到 {"name"=&gt;"foo", "phones"=&gt;{"phone_number"=&gt;"123"}}(但这会导致 create 函数出现问题。

这里有什么问题?

请注意,此问题与该问题密切相关:accepts_nested_attributes_for: What am I doing wrong 以及此帖子:https://groups.google.com/forum/#!topic/rubyonrails-talk/4RF_CFChua0

【问题讨论】:

    标签: ruby-on-rails ruby nested-forms nested-attributes


    【解决方案1】:

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

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

    【讨论】:

    • 我需要手机的实例变量吗?然而,这不会让控制器保存电话号码
    • 如果您希望您的视图可以访问它,您需要使实例变量在控制器中可用。当您说f.fields_for :phones 时,这意味着使用@phones 实例变量。
    • 好的,我不知道,谢谢。但是,我认为在这种情况下def new 甚至没有被触及,但render text: person_params.inspect 不会返回我输入的数字。
    • def new 在您启动对象时被触摸。但是你是正确的,当你的动作被调用时,你需要从数据库中再次加载它。您没有指明控制器中的哪个操作正在呈现相关表单。
    • 我猜你不是想在视图中显示当前值。 params[] 会返回什么?
    【解决方案2】:

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

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

    代替

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

    @phron 已经在这里说过: accepts_nested_attributes_for: What am I doing wrong

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 2021-10-19
      • 2020-03-18
      • 2012-06-14
      • 2014-11-15
      • 1970-01-01
      • 2012-07-02
      • 2011-09-07
      相关资源
      最近更新 更多