2012-08-09 5 views
8

Mein Teil wird zweimal gerendert: am Anfang der Seite und an der Stelle, wo es soll. Scheinbar passiert dies nur, wenn ich ActiveAdmin-spezifischen Code (table_for) habe.Teilweise wird zweimal in ActiveAdmin gerendert

Jede Hilfe wird sehr geschätzt. Im Folgenden finden Sie einige Codeschnipsel, die ich verwende.

In meiner aktiven Admin-Datei:

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 

In _child_list.html.erb Datei

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

Wahrscheinlich das erste, was Sie getan haben, aber haben gesucht Sie Ihr Projekt für so etwas wie „/ admin/process_nodes/child_List“, um zu sehen, wenn Sie versehentlich als auch die teilweise in einer anderen Ansicht zu machen? – anxiety

+0

Wo wird die Panel-Methode aufgerufen, entweder direkt oder indirekt in Ihrem Code? Bitte geben Sie den Code an, an dem es heißt. –

Antwort

5

Von dem, was ich gelesen habe, wird ActiveAdmin erhalten automatisch den Pfad der Teil basierend auf dem aktuellen Modell/Ressourcennamen. Das bedeutet, dass "child_list"
"/admin/process_nodes/_child_list.html.erb" führt.

Verbrauch würde

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

sein Auch scheint es, wie es besser wäre, Ihre unless Anweisung innerhalb der ActiveAdmin Feldblock aufzunehmen. Dann müssen Sie keinen unnötigen Render-Aufruf hinzufügen, wenn keine Unterprozesse vorhanden sind.

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 

Schließlich weiß ich nicht, ob die Verwendung einer partiellen ist ein großer Vorteil. Ich weiß nicht, ob du etwas anderes im Teil hast, aber du könntest es so schreiben.

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