2

こんにちはみんな私はアクティブな管理者でカスタマイズされたフォームを構築することにかなり立ち往生しています。アクティブな管理者を使用して、独自にカスタマイズしたフォームを見つけて設定しました。ただし、ここで動的フォームを作成する必要があります。これには、いくつかのajax呼び出しを行い、ユーザーが入力できるようにフォームの一部を返すことが含まれます。

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

4

1 に答える 1

8

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

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

次に、正しいレジスタブロック(この場合はapp / admin / 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

この場合、テンプレートは、フォームに配置される順序付けされていないリストをレンダリングするだけです。app / views / admin / authors / search.html.erbにあり、次のようになります。

<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>

ajax呼び出しをトリガーするカスタム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);
   });

何でも可能です。本当に必要なものを分析するだけです:フォームパーシャル、ネストされたフォームパーシャル?選択に応じて?代わりに、マルチステップフォームを作成したい場合があります。幸運を。

于 2012-05-02T15:17:40.510 に答える