2017-01-10 11 views
0

私は非常に似ている子供のスコアを持つ親オブジェクトを持っています。私は繭を使ってそれらを編集するためのテーブルを持ったフォームを持っています。それで(そしてthis answer)、私はテーブルに新しい行を追加し、既存のものを削除することができ、うまく動作します。繭を使ってRailsで子オブジェクトをクローンする方法はありますか?

私がしたいのは、行の最後に別のボタンを追加して、削除ボタンと一緒にその行を新しい行として複製することです。

親フォーム:部分

= simple_form_for @release, html: { multipart: true } do |f| 
    = f.error_notification 
    .col-md-12 
    %table#myTable.table-striped.table-bordered 
     %thead 
     %tr 
      %th Description 
      ... 
      %th Remove 

     %tbody.codes 
     = f.simple_fields_for :codes, wrapper: false do |code| 
      = render 'code_fields', f: code 
      ---> New code below would go here <--- 

    .links 
     = link_to_add_association 'Add Code', f, :codes, data: {"association-insertion-node" => "tbody.codes", "association-insertion-method" => "append"} 

    .form-actions 
     = f.button :submit, class: 'btn btn-primary pull-right' 

子供:

= link_to_add_association 'Clone', f, :codes, data: {"association-insertion-node" => "tbody.codes", "association-insertion-method" => "append"}, render_options: {locals: {code: code.object}} 
:私は、行の最後の td要素にこのような何かを追加できるようにしたいと思い
%tr.nested-fields 
    = f.input :id, as: :hidden 
    %td= f.input :description, label: false, input_html: { class: 'input-sm myinput' } 
    ... 
    %td 
    = link_to_remove_association f, class: 'btn btn-default btn-xs' do 
     .glyphicon.glyphicon-remove 

私には2つの問題があります。まず、コクーンが挿入するHTMLをあらかじめ生成する方法です。この関数呼び出しを部分的に入れることはできません。なぜなら、構文を正しく取得しても、無限ループを作成するからです。

HTMLの生成に値を指定する何らかの方法があれば、何らかの方法でDOMノードを適切なテーブル行の最後のセルに配置することで問題を回避できます現在のオブジェクト。 "クローン"ボタンを挿入したい時点で、code.object変数に現在の "code"子オブジェクトがあります。 (codeは現時点でfields_forフォームオブジェクトです)

これを実行する方法はありますか? render_optionsは有望そうだが、これは単なる構文上の問題か、ジェネレータが決して値のハッシュを見ることがないかどうかわからない。フィールドの生成に渡す。

答えて

1

:wrap_objectオプションを見ると、オブジェクトをあらかじめ初期化することができます。既存のオブジェクトからもクローンを作成することができるはずです。

など。

- code_to_clone = f.object 
= link_to_add_association('Clone', f, :codes, 
    wrap_object: Proc.new { |new_code| new_code.name = code_to_clone.name; new_code }) 

をするだけデモンストレーションの目的のために1つのフィールドをコピー:)

+0

'= link_to_add_association 'クローン'、F:コード、データ:{ "関連-挿入ノード"=>"この仕事かもしれないような何かtbody.codes "、" association-insertion-method "=>" append "}、wrap_object:Proc.new {| d | d = code.object.clone; d.id = nil; d} '治療をする! –

+0

Railsの新しいバージョンで#cloneの代わりに#dupを使用するべきであることが判明しました。 –

関連する問題