首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套属性字段不会使用Reform显示

嵌套属性字段不会使用Reform显示
EN

Stack Overflow用户
提问于 2017-07-11 12:36:01
回答 1查看 633关注 0票数 3

我正在使用Reform在当前项目中创建一个表单对象,但是嵌套的字段不会出现在表单中。这是我的密码:

装运模式:

代码语言:javascript
复制
class Shipment < ApplicationRecord
  has_one :shipment_detail
end

ShipmentDetail模型:

代码语言:javascript
复制
class ShipmentDetail < ApplicationRecord
  belongs_to :shipment
end

改革班

代码语言:javascript
复制
class ShipmentForm < Reform::Form
  property :shipment_type
  property :measure

  property :shipment_detail do
    property :po_number
    property :job_no
  end
end

控制器

代码语言:javascript
复制
class ShipmentsController < ApplicationController
  def new
    @shipment = ShipmentForm.new(Shipment.new)
  end
end

模板

代码语言:javascript
复制
<%= 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_typemeasure在窗体上可见,而po_numberjob_no则不可见。我该怎么做才能让他们看得见?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 13:00:21

在“改革”中,您需要使用一个prepopulator来创建一个新的/空白的:shipment_detail部分,以显示在窗体上。

http://trailblazer.to/gems/reform/prepopulator.html

  • 预填充是指当您想填写字段时(又名。)或在呈现之前添加嵌套窗体。
  • 填充程序是在验证之前运行的代码。

下面是我在代码中使用的内容--您可以从代码中了解到您的想法:

代码语言:javascript
复制
   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
    }
  • 必须手动调用预填充。 Controller#new @shipment_form = ShipmentForm.new(Shipment.new) @shipment_form.shipment_detail #=> nil @shipment_form.prepopulate!@shipment_form.shipment_detail #=> <嵌套ShipmentDetailForm @model=>

RE:编辑表单

如果您在新操作中创建了一个ShipmentForm,并将details部分保留为空白,那么您希望这些字段出现在编辑操作中,您也需要在该操作上再次运行预填充器。就像新行动一样。

在我上面的代码中,如果当前没有if side_panels.count == 0行,我将在编辑表单中添加缺少的行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45034834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档