我有一个在迭代器中呈现的 simple_fields_for 表单,如下所示:
<%= simple_form_for @port_stock, url: port_stocks_sell_order_path, method: :post, html: { class: "form-inline" } do |f| %>
<% @buy_port_stocks.each do |port_stock| %>
<%= f.simple_fields_for :closed_positions, html: { class: "form-inline" } do |c| %>
<div class="form-group">
<%= c.input_field :port_stock_id, as: :hidden, value: port_stock.id %>
<%= c.input_field :num_units, id: "sell-ps-#{port_stock.id}", placeholder: "Number of Units", class: "form-control mx-sm-3" %>
<%= c.input_field :closed_price, id: "sale-price-for-ps-#{port_stock.id}", placeholder: "Sale Price", class: "form-control mx-sm-3" %>
</div>
<% end %>
<% end %>
<% end %>
在我的控制器中,我有这个:
@port_stock = current_user.port_stocks.friendly.find(params[:id])
@buy_port_stocks = current_user.port_stocks.buy.joins(:stock).where(stocks: { ticker: @stock.ticker})
@cp = @port_stock.closed_positions.build
我的PortStock.rb
模型:
has_many :closed_positions, dependent: :destroy
accepts_nested_attributes_for :closed_positions, allow_destroy: true
我的ClosedPosition.rb
模型:
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
以上对于@port_stock
没有closed_positions
.
例如,该表单呈现如下:
请注意,Number of Units
andSale Price
字段在每一行中只显示一次(这是我所期望的)。
但是,一旦我closed_position
在 any 上创建了一个,PortStock
它就会产生两个问题:
首要问题
它将现有的已平仓头寸预填充为一个字段,然后为 渲染另一个空白字段closed_positions
,即像这样:
我想要发生的是它只呈现新表单而不是重新呈现每行上现有的 closed_position 值。用户不能在此表单中编辑现有的已平仓头寸。
第二期
每当有多个已平仓头寸时,它都会在每一行中呈现错误的头寸。
请注意呈现的每个值是如何表示num_units: 100
&&price: 8.0
的,请查看这些相同 closed_positions 的控制台输出:
=> [#<ClosedPosition:0x00007ff13e77c6d0
id: 9,
closer_id: 2,
port_stock_id: 17,
num_units: 100,
closed_price: 8.0,
ticker: "CAC",
#<ClosedPosition:0x00007ff13e77c2e8
id: 10,
closer_id: 3,
port_stock_id: 18,
num_units: 10,
closed_price: 7.95,
ticker: "CAC",
#<ClosedPosition:0x00007ff13e77c018
id: 11,
closer_id: 10,
port_stock_id: 19,
num_units: 50,
closed_price: 7.9,
ticker: "CAC",
正确的值实际上是:
- 数量单位:100 && 价格:8.0
- 数量单位:10 && 价格:7.95
- 数量单位:50 && 价格:7.9
我不明白为什么它为所有port_stock
对象输出相同的值。
如何在我的simple_fields_for
表单中解决这两个问题?