2012-08-09 21 views
8

Mi parcial se representa dos veces: en la parte superior de la página y en el lugar donde se supone que debe. Aparentemente, esto solo ocurre cuando tengo el código específico de ActiveAdmin (table_for).Parcial se representa dos veces en ActiveAdmin

Cualquier ayuda es muy apreciada. A continuación se muestran algunos fragmentos de código que estoy usando.

En mi activa archivo admin:

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 

En archivo _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

Probablemente el primero que lo hizo, pero ¿ha buscado su proyecto para algo como "/ admin/process_nodes/child_list" para ver si está accidentalmente haciendo que el parcial de alguna otra vista así? – anxiety

+0

¿Dónde se llama al método de panel, ya sea directa o indirectamente en su código? Por favor, cite el código donde se llama. –

Respuesta

5

Por lo que he leído, ActiveAdmin obtendrá automáticamente la trayectoria de la parcial basado en el nombre del modelo/recurso actual. Lo que significa que pasar "child_list" dará como resultado
"/admin/process_nodes/_child_list.html.erb".

uso sería

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

Además, parece que sería mejor que incluya su declaración unless dentro del bloque de panel de ActiveAdmin. Entonces no tendrá que agregar una llamada de render innecesaria si no hay subprocesos.

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 

Finalmente, no sé si usar un parcial es una gran ventaja. No sé si tienes algo más en el parcial, pero podrías escribirlo de esta manera.

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