我正在使用Reform在当前项目中创建一个表单对象,但是嵌套的字段不会出现在表单中。这是我的密码:
装运模式:
class Shipment < ApplicationRecord
has_one :shipment_detail
endShipmentDetail模型:
class ShipmentDetail < ApplicationRecord
belongs_to :shipment
end改革班
class ShipmentForm < Reform::Form
property :shipment_type
property :measure
property :shipment_detail do
property :po_number
property :job_no
end
end控制器
class ShipmentsController < ApplicationController
def new
@shipment = ShipmentForm.new(Shipment.new)
end
end模板
<%= form_for @shipment, url: shipments_path, method: :post do |f| %>
<%= f.label :shipment_type %><br />
<%= f.text_field :shipment_type %><br /><br />
<%= f.label :measure %><br />
<%= f.text_field :measure %><br /><br />
<%= f.fields_for :shipment_detail do |d| %>
<%= d.label :po_number %><br />
<%= d.text_field :po_number %><br /><br />
<%= d.label :job_no %>
<%= d.text_field :job_no %><br /><br />
<% end %>
<% end %>只有字段shipment_type和measure在窗体上可见,而po_number和job_no则不可见。我该怎么做才能让他们看得见?
发布于 2017-07-11 13:00:21
在“改革”中,您需要使用一个prepopulator来创建一个新的/空白的:shipment_detail部分,以显示在窗体上。
http://trailblazer.to/gems/reform/prepopulator.html
下面是我在代码中使用的内容--您可以从代码中了解到您的想法:
collection :side_panels, form: SidePanelForm,
prepopulator: ->(options) {
if side_panels.count == 0
self.side_panels << SidePanel.new(sales_order_id: sales_order_id, collection: sales_order.collection)
end
}RE:编辑表单
如果您在新操作中创建了一个ShipmentForm,并将details部分保留为空白,那么您希望这些字段出现在编辑操作中,您也需要在该操作上再次运行预填充器。就像新行动一样。
在我上面的代码中,如果当前没有if side_panels.count == 0行,我将在编辑表单中添加缺少的行。
https://stackoverflow.com/questions/45034834
复制相似问题