在ActiveAdmin中创建动态表单

Ali*_*Ali 2 ruby-on-rails-3 activeadmin

嗨,伙计们,我非常坚持在主动管理员中构建自定义表单.我已经想出了,甚至使用主动管理员设置了我自己的自定义表单.但是我需要在这里创建一个动态表单.这涉及进行一些ajax调用并返回表单的部分内容以供用户填写.

您似乎可以创建成员操作,但这是在已创建的资源上.在我的情况下,我需要在尚未创建的资源上创建多个条目.

Sjo*_*rst 8

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

match '/admin/search/authors' =>  'admin/articles#search_authors',  :via => 'post', :as => :admin_search_authors
Run Code Online (Sandbox Code Playgroud)

然后在正确的寄存器块中,在这种情况下,在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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,模板只是呈现一个无序列表放在表单中.位于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>
Run Code Online (Sandbox Code Playgroud)

触发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);
   });
Run Code Online (Sandbox Code Playgroud)

一切皆有可能.只需分析你真正需要的东西:形成部分,嵌套形式的部分?根据选择?也许你想要构建一个多步形式.祝好运.