2012-04-29 36 views
2

こんにちは、私はかなりアクティブな管理者でカスタマイズされたフォームを構築するつもりです。私は把握して、アクティブな管理者を使って自分のカスタマイズしたフォームを設定しました。しかし、私はここで動的なフォームを作成する必要があります。これは、いくつかのajax呼び出しを行い、ユーザが記入するためのフォームの一部を返すことを含みます。ActiveAdminで動的フォームを作成

メンバーアクションを作成することはできますが、それは作成されたリソース上にあるようです。私の場合は、まだ作成されていないリソースに複数のエントリを作成する必要があります。

答えて

8

これは、あなたを始めたかもしれません。方法はconfig.routesにあなたのAjaxのルート(ちょうどいくつかのランダムなサンプルコード)を追加することができます

match '/admin/search/authors' => 'admin/articles#search_authors', :via => 'post', :as => :admin_search_authors 

そして、正しいレジスタブロックでは、この場合にはアプリ/管理/ articles.rbにあなたのを置くことができますコントローラロジック

ActiveAdmin.register Article do 
    ... 
    controller do 
    def search_authors 
     @authors = Author.find_by_query params[:query] 
     render :layout => false, :template => 'admin/authors/search' 
    end 
    end 

end 

この場合、テンプレートはフォームに配置される順序付けられていないリストをレンダリングするだけです。アプリ/ビュー/管理者/著者/ search.html.erbに位置しており、次のようになります。AJAX呼び出しは次のようになりますトリガするために

<ul> 
    <% if @authors.count < 1 %> 
    <li>None</li> 
    <% else %> 
    <% @authors.each do |a| %> 
     <li> 
     <a href="#" onclick="javascript:insert_your_own_voodoo_function_here();return false;"> 
     <%= raw a.listname %> 
     </a> 
     </li> 
    <% end %> 
    <% end %> 
</ul> 

カスタムjqueryの、ここでdelayedObserverは(http://code.google.com/p/jquery-utils/wiki/DelayedObserverのおかげで)使用されています:

$(function() { 
    $('#search_author').delayedObserver(function() { 
     $('#search_author').after('<img class="ajax-loader" id="ajax-loader" alt="Ajax-loader" src="/images/ajax-loader.gif">'); 
     $.ajax({ 
     url: '<%= admin_search_authors_path %>', 
     dataType: 'html', 
     type: 'post', 
     data: { query: $('#search_author').val(), authenticity_token: $('meta[name=csrf-token]').attr("content")}, 
     success: function(data) { 
      $('.ajax-loader').remove(); 
      $('#chooseauthor').html(data); 
      $("#artikel_edit_auteurs").effect("highlight", {}, 1500); 
     } 
     }); 
    }, 0.5); 
    }); 

何かが可能です。あなたが本当に必要なものを分析するだけです:フォームパーシャル、ネストフォームパーシャル?選択に応じて?たぶん、複数のステップフォームを作成したいと思うかもしれません。がんばろう。

関連する問題