2017-07-11 19 views
2

私は私の現在のプロジェクトでフォームオブジェクトを作成するために改革の宝石を使用していますが、ネストされたフィールドをフォームに表示されませんを使用して表示されません。ネストされたプロパティフィールドには、改革の宝石

出荷モデル::

class Shipment < ApplicationRecord 
    has_one :shipment_detail 
end 

ShipmentDetailモデル:

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 
ここに私のコードです10の

テンプレート

<%= 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ではありません。私はそれらを見えるようにするために何をすべきですか?フォームに表示するshipment_detailセクション:改革で

+0

コレクション: プロパティを実行しますshipment_detail:PO_NUMBER プロパティ:job_no 最後はこの –

+0

@stefが –

+0

あなたは改革クラスを編集した後、あなたの開発サーバーを再起動した動作しませんしてみてください?リロードパスリストにはない可能性があります。 – stef

答えて

1

は新しい/空白を作成するためにprepopulatorを使用する必要があります。

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

  • prepopulatorsあなたはフィールド(別名。デフォルト)を記入するか、レンダリングする前に、ネストされたフォームを追加したいときです。
  • populators彼らはただ、検証前に実行されるコードです。ここで

私はあなたがそれからあなたのためのアイデアを得ることができます私のコードで使用されるものです:

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 #=> <nested ShipmentDetailForm @model=<ShipmentDetail ..>> 
    

RE:編集フォーム

新しいアクションでShipmentFormを作成し、空白の詳細セクションを残し、後であなたは、これらのフィールドが編集アクションに表示されるようにする場合その操作でプレポプレーターを再度実行する必要があります。ちょうど新しいアクションのように。私はそこに何が現在存在しない場合は編集フォームに欠けているラインに追加されますif side_panels.count == 0ラインを持っている上に私のコードで

+0

その作業をしようとします!ありがとう –

+0

編集では、同じではない、ネストされた属性の値は表示されません –

関連する問題