2012-08-09 43 views
8

我的部分呈现两次:在页面的顶部和它应该的位置。 显然,这只有当我有ActiveAdmin特定的代码(table_for)时才会发生。部分在ActiveAdmin中呈现两次

任何帮助是极大的赞赏。 下面是我使用的一些代码片段。

在我的主动管理文件:

panel "Children - SubProcesses" do 
    text_node link_to "New", new_admin_sub_process_node_path(:parent_id => process_node.id) 
    div render :partial => "/admin/process_nodes/child_list", :locals => { :parent => process_node } 
end 

在_child_list.html.erb文件

<%= 
unless parent.children.empty? 
table_for parent.children do 
    column :id 
    column :name 
    column "Actions" do |child_node| 
      text_node link_to "View", admin_process_node_path(child_node) 
      text_node " " 
      text_node link_to "Edit", edit_admin_process_node_path(child_node) 
      text_node " " 
      text_node link_to "Delete", admin_process_node_path(child_node), :method => :delete, :confirm => "Delete?" 
    end 
end 
end 
%> 
+0

可能你做的第一件事,但你搜索你的东西,如“/管理/ process_nodes/child_list”看,如果你不小心渲染局部以其他视图以及项目? – anxiety 2012-08-27 06:52:07

+0

面板方法在代码中直接或间接调用的地方在哪里?请引用它所在的代码。 – 2012-08-27 07:32:46

回答

5

从我读过,ActiveAdmin将自动获得的路径部分基于当前型号/资源名称。这意味着通过"child_list"将导致
"/admin/process_nodes/_child_list.html.erb"

用法是

div render "child_list", :locals { :parent => process_node } 

而且,现在看来似乎会更好,包括ActiveAdmin板块内的unless声明。如果没有子进程,则不必添加不必要的渲染调用。

panel "Children - SubProcesses" do 
    text_node link_to "New", new_admin_sub_process_node_path(:parent_id => process_node.id) 

    unless parent.children.empty? 
     div render "child_list", :locals { :parent => process_node } 
    end 
end 

最后,我不知道是否使用partial是一个很大的好处。我不知道你是否有其他部分,但你可以这样写。

panel "Children - SubProcesses" do 
    text_node link_to "New", new_admin_sub_process_node_path(:parent_id => process_node.id) 

    unless parent.children.empty? 
    table_for parent.children do 
     column :id 
     column :name 
     column "Actions" do |child_node| 
     text_node link_to "View", admin_process_node_path(child_node) 
     text_node " " 
     text_node link_to "Edit", edit_admin_process_node_path(child_node) 
     text_node " " 
     text_node link_to "Delete", admin_process_node_path(child_node), :method => :delete, :confirm => "Delete?" 
     end 
    end 
    end 
end