【问题标题】:Rails Nested Form - Unpermitted ParametersRails 嵌套表单 - 不允许的参数
【发布时间】:2017-05-16 22:54:47
【问题描述】:

我有一个包含许多项目和客户的订单模型。出于某种原因,我一直在寻找解决方案,但在使用嵌套表单时,我无法将项目和客户的属性保存在其受人尊敬的表中。

我对 Rails 比较陌生,所以如果我遗漏了一些明显的东西,我深表歉意。

于 2017-05-16 16:12:17 -0600 开始为 ::1 发布“/orders” 通过 OrdersController#create 作为 HTML 参数:{"utf8"=>"✓", "authenticity_token"=>"k1QPQ560j44Mx0SNeCMBQAUGLQfEi4g0QpDfHuYeP4Zd7nVgcHJf3qXNsVQv29dV+5G0oJ7wioQ3Idw+DP+iw==", "order"=>{"customer"=>{"name"=>"Test", "email"=>"Test", "phone"=>"Test"}, "item"=>{"name"=>"Test", "ref_num"=>"Test", “零售”=>“122”},“状态”=>“测试”,“到达”=>“06/06/19”, "tracking"=>"Test439"}, "commit"=>"Save Order"} 未经许可 参数:客户、商品

订单控制器

    def create
        @order = Order.new(order_params)
        @order.items.build
        @order.customers.build
        @order.save
        redirect_to @order 
    end
private
    def order_params
    params.require(:order).permit(:status, :arrival, :tracking, 
        customers_attributes: [:name, :phone, :email], 
        items_attributes: [:name, :ref_num, :retail])
    end

订单模型

class Order < ApplicationRecord
    has_many :items
    has_many :customers
    accepts_nested_attributes_for :items, :customers
end

订单表格(新)

<%= form_for :order, url: orders_path do |f| %>

<%# customer parameters%>
<%= f.fields_for :customers do |cu| %>
   <p>
    <%= cu.label :customer_name %><br>
    <%= cu.text_field :name %>
  </p>

  <p>
    <%= cu.label :email %><br>
    <%= cu.text_field :email %>
  </p>

  <p>
    <%= cu.label :phone %><br>
    <%= cu.text_field :phone %>
  </p>
<% end %>

 <%# Item parameters %>

 <%= f.fields_for :items do |it| %>

  <p>
    <%= it.label :item_name %><br>
    <%= it.text_field :name %>
  </p>

  <p>
    <%= it.label :reference_number %><br>
    <%= it.text_field :ref_num %>
  </p>

  <p>
    <%= it.label :retail %><br>
    <%= it.text_field :retail%>
  </p>
<% end %>

<%# order parameters%>
  <p>
    <%= f.label :status %><br>
    <%= f.text_field :status %>
  </p>

  <p>
    <%= f.label :est_arrival %><br>
    <%= f.text_field :arrival %>
  </p>

 <p>
    <%= f.label :tracking %><br>
    <%= f.text_field :tracking %>
</p>


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

 <% end %>
<%= link_to 'Back', orders_path %>

【问题讨论】:

  • 这真的来自这个表格吗?至少乍一看,我看不出表格有什么问题。
  • 尝试在您的表单上使用form_for @order,并在您的new 操作上实例化@order = Order.new

标签: ruby-on-rails


【解决方案1】:

这是因为form_for :order 没有引用您的模型对象,它创建了一个简单的:order 参数,它没有考虑您模型的accepts_nested_attributes_for,因此没有使用@ 构建f.fields_for :customers 987654325@ 后缀。您应该实例化一个Order 对象,以便在您的form_for @object 中发生预期的行为,而不是仅仅引用一个仅呈现参数名称的:object

【讨论】:

  • 感谢您的帮助!我已将form_for :object 更改为form_for @object。不幸的是,在呈现表单时,现在只显示与订单相关的字段。我还需要对 :customers 和 :items 进行更改吗?
  • 您可能还必须在控制器中添加 @object.customers.build 以执行 new 操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多