为什么这个simple_fields_for不执行?

Why does this simple_fields_for not execute?

我有两个模型:

class PortStock < ApplicationRecord
  has_many :closed_positions
  accepts_nested_attributes_for :closed_positions
end

class ClosedPosition < ApplicationRecord
  belongs_to :closer, class_name: "PortStock", foreign_key: "closer_id"
  belongs_to :closed, class_name: "PortStock", foreign_key: "port_stock_id" 
end

我知道这个关联是有效的,因为我已经测试过了。

然后我在 views/port_stocks/sell/_form.html.erb 有一个部分表格,看起来像这样:

<%= simple_form_for @port_stock, url: port_stocks_sell_order_path, method: :post do |f| %>
   <% @port_stocks.each do |port_stock| %>
       <%= f.simple_fields_for :closed_positions, html: { class: "form-inline" } do |c| %>
          <%= c.input_field :num_units, id: "sell-ps-#{port_stock.id}", class: "form-control mx-sm-3" %>
       <% end %>
   <% end %>
  <%= f.button :submit, "Sell Stock", class:"btn btn-primary" %>
<% end %>

但是,当呈现 HTML 时,它不会呈现 simple_fields_for 中的任何文本字段。

如果我在 f.simple_fields_for 行之前放置一个 binding.pry,它会停止执行。如果我把它放在后面,它就不会。这告诉我 simple_fields_for 没有被执行。

但是根据 the docs 这就是我应该做的。

我错过了什么?为什么这不呈现 simple_fields_for 中的表单字段?

我想通了。

我实际上并没有 build 我的控制器中的 closed_positions

因此,一旦我将这段代码添加到我的控制器中:

@port_stock.closed_positions.build

这真是太棒了。