为什么这个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
这真是太棒了。
我有两个模型:
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
这真是太棒了。