0

フィールドを動的に挿入するネストされたフォームに苦労しています。私のコードは、Ryan Bates の素晴らしい Railscast に基づいています。私の問題は、「フィールドの追加」ボタンをネストされたフォームの外に移動する必要があることです。フォームの生成に必要なオブジェクトの一部にアクセスできないため、これは問題を引き起こします。

以下のコードでは、追加/削除ボタンが同じ場所にあります。これを行うために if ステートメントを変更することはできますが、フィールドの追加ボタンを f.simple_fields_for :fund_levels ループの外に移動することはできません。

これを行うためのクリーンな方法に関する提案はありますか?

景色

     = f.simple_fields_for :fund_levels do |fl|
       - fl.object.id ? headerappend = fl.object.id : headerappend = "#{i}-notset"
       %div{id: "flheader-#{headerappend}"}
         %div
           = link_to "Sponsor levels", "#", :class => "show_hide", :id => "initiator1_fl#{i}", :style=>"margin-bottom:2px;", :onclick=>"return false"
         %div{:class => "slidingDiv #{fund_levels_last?(i, @fund_level_count) ? "shown": "hidd" } whitebg leftadj", :id=>"body_fl#{i}", :style=>"width:100%;" }

           = render :partial => 'fund_level_fields', :locals => {:fl => fl, :ad => ad, :i => i, :f => f}
           %div{:style => "float: right; padding: 20px 20px 20px 0"}
             = fund_levels_last?(i, @fund_level_count) ? ( link_to_add_fields "add new level", f, :fund_levels, fl, i+1, ad ) : ( link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')} )
       - i += 1
     %div#newfields
       - # THE BUTTON SHOULD GO HERE if it is an ADD FIELDS (remove btn should stay above)

application_helper ファイル

   def link_to_add_fields(name, f, association, sublevel, counter, parent)

     new_object = f.object.class.reflect_on_association(association).klass.new
     fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
       render(association.to_s.singularize + "_fields", :f => builder, :fl => sublevel, :i => counter, :ad => parent) #fl, i, ad
     end

     # this bit is required because of some bugs in haml
     fields.gsub!(/\<haml\:newline\/\>/, '').html_safe

     link_to name, '#', :id => "#{name}|-|#{association}|-|#{fields}", :class => "addfields", :onclick => "return false"
   end
4

1 に答える 1

0

最後のループ オブジェクトを変数に格納し、それをループの外で使用することで解決しました。

(...) -thisvar = fl

-link_to_add_fields "新しいレベルを追加", f, :fund_levels, thisvar, i+1, ad

于 2012-11-03T03:13:16.613 に答える