2012-04-29 91 views
2

嗨,我很坚持在活动管理中构建自定义表单。我已经想通了,甚至使用活动管理员设置自己的自定义表单。不过,我需要在这里创建一个动态表单。这涉及到进行一些Ajax调用并返回用户填写表单的部分内容。在ActiveAdmin中创建动态表单

看来你可以创建一个成员动作,但是这是创建的资源。在我的情况下,我需要在尚未创建的资源上创建多个条目。

回答

8

这可能会让你开始。一种方法可能是你的Ajax路由添加到config.routes(只是一些随机的示例代码):

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,看起来像:

<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来触发Ajax调用看起来是这样的,这里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); 
    }); 

一切皆有可能。分析一下你真正需要的东西:形成partials,嵌套的形式partials?取决于选择?也许你想要建立一个多步骤形式。祝你好运。