【问题标题】:Error: Unpermitted parameters with nested attributes错误:具有嵌套属性的不允许参数
【发布时间】:2015-02-14 09:35:18
【问题描述】:

我在保存嵌套字段的内容时遇到问题。我有两个模型IncorporationCompany。它们的关系如下:

class Company < ActiveRecord::Base
  belongs_to :incorporation
end

class Incorporation < ActiveRecord::Base
  has_one :company

  accepts_nested_attributes_for :company
end

我的目标是在同一个表单中创建一个新的 CompanyIncorporation 条目,同时使用合并控制器和视图。

问题)但是,每次我尝试提交表单时,Incorporation 条目都会通过,但公司条目却被 Unpermitted parameters 错误阻止:

Started POST "/incorporations" for 127.0.0.1 at 2014-12-15 22:40:59 -0700
Processing by IncorporationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"lCj/ZtNNE/9l/UAlYcnA8EAe8vmMN010toS4t5e+ZkA=", "incorporation"=>{"title"=>"test", "company"=>{"name"=>"test"}}, "button"=>""}
Unpermitted parameters: company
Completed 500 Internal Server Error in 4ms

这尤其令人惊讶,因为我相信我已经正确设置了我的强参数。下面是我的控制器。

class IncorporationsController < ApplicationController
  def index
  end

  def show
  end

  def new
@incorporation = Incorporation.new
@company = Company.new
  end

  def create
@incorporation = Incorporation.new(incorporation_params)

if @incorporation.save
  redirect_to @incorporation, notice: "Successfuly saved incorporation info."
else
  render 'new'
end
  end

  def edit
  end

  def show
  end

  private

  def incorporation_params
params.require(:incorporation).permit(:title, company_attributes: [:name, :state_corp, :street, :city, :state, :zip, :outstanding_common_stock, :fiscal_year_end_month, :fiscal_year_end_day])
  end
end

我使用的部分表单如下:

<%= form_for @incorporation do |f| %>
  <div class="panel-body">
    <%= f.text_field :title, input_html: { class: 'form-control' } %>
    <h3>TEST</h3>
    <%= f.fields_for @company do |company| %>
      <%= company.text_field :name, input_html: { class: 'form-control' } %>
    <% end =%>
  </div>
  <%= f.button :submit, class: "btn btn-primary" %>

<% end =%>

任何想法都将不胜感激。

【问题讨论】:

  • :公司不是@company AND @company = @incorporation.build_company
  • @argentum47 嘿伙计,非常感谢!随时写下您的评论作为答案,以便我给予您信任。

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


【解决方案1】:

执行上述操作的通常方法是

控制器

  def new
  @incorporation = Incorporation.new
  @company = @incorporation.build_company

在你看来

<%= form_for @incorporation do |f| %>
  <div class="panel-body">
    <%= f.text_field :title, input_html: { class: 'form-control' } %>
    <h3>TEST</h3>
    <%= f.fields_for :company do |company| %>
      <%= company.text_field :name, input_html: { class: 'form-control' } %>
    <% end =%>
  </div>
  <%= f.button :submit, class: "btn btn-primary" %>
<% end %>

其他都还好。

【讨论】:

    【解决方案2】:

    交叉检查代码库中的一些内容。

    1) 您应该在公司表中有公司 ID。如果没有,请添加一个。

    2) 尝试在新操作中更改以下代码:

    def new
      @incorporation = Incorporation.new
      @incorporation.company = Company.new
      #Or you can simply build company also like below
      #@incorporation.company.build
    end
    

    尝试在视图中更改以下内容:

    <%= form_for @incorporation do |f| %>
      <div class="panel-body">
        <%= f.text_field :title, input_html: { class: 'form-control' } %>
        <h3>TEST</h3>
        <%= f.fields_for :company do |company| %>
          <%= company.text_field :name, input_html: { class: 'form-control' } %>
        <% end =%>
      </div>
      <%= f.button :submit, class: "btn btn-primary" %>
    
    <% end =%>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2017-06-03
      • 2016-02-06
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多