2012-08-09 2 views
8

Il mio partial viene sottoposto a rendering due volte: nella parte superiore della pagina e nel punto in cui è previsto. Apparentemente, questo succede solo quando ho un codice specifico ActiveAdmin (table_for).Il rendering parziale viene eseguito due volte in ActiveAdmin

Qualsiasi aiuto è molto apprezzato. Di seguito sono riportati alcuni frammenti di codice che sto utilizzando.

Nel mio attiva di file 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 

Nel file di _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

Probabilmente la prima cosa che hai fatto, ma avete cercato il vostro progetto per qualcosa come "/ admin/process_nodes/child_list" per vedere se si sta rendendo accidentalmente il parziale in qualche altro vista come bene? – anxiety

+0

Dove viene richiamato il metodo del pannello, direttamente o indirettamente nel codice? Si prega di citare il codice in cui è chiamato. –

risposta

5

Da quello che ho letto, ActiveAdmin otterrà automaticamente il percorso del parziale basato sul modello corrente/nome della risorsa. Il che significa che il passaggio "child_list" comporterà
"/admin/process_nodes/_child_list.html.erb".

Uso sarebbe

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

Inoltre, sembra che sarebbe meglio includere il tuo unless dichiarazione all'interno del blocco del pannello ActiveAdmin. Quindi non dovrai aggiungere una chiamata di rendering non necessaria se non ci sono sottoprocessi.

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 

Infine, non so se l'utilizzo di un parziale è un grande vantaggio. Non so se hai qualcos'altro nel parziale, ma potresti scriverlo in questo modo.

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