为什么这个simple_fields_for没有执行?

时间:2018-06-18 01:06:06

标签: ruby-on-rails ruby-on-rails-5 simple-form nested-forms simple-form-for

我有两种模式:

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中的任何文本字段。

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

但根据the docs我应该怎么做。

我错过了什么?为什么这不会在simple_fields_for

中呈现表单字段

1 个答案:

答案 0 :(得分:0)

我明白了。

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

所以,一旦我将此代码添加到我的控制器:

@port_stock.closed_positions.build

这就像一个魅力。