9

我的部分被渲染了两次:在页面顶部和它应该在的地方。显然,这只发生在我有特定于 ActiveAdmin 的代码 (table_for) 时。

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

在我的活动管理文件中:

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

1 回答 1

5

根据我的阅读,ActiveAdmin 将根据当前模型/资源名称自动获取部分路径。这意味着传递"child_list"将导致
"/admin/process_nodes/_child_list.html.erb".

用法是

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

unless此外,将您的语句包含在 ActiveAdmin 面板块中似乎会更好。如果没有子进程,您就不必添加不必要的渲染调用。

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

最后,我不知道使用部分是否有很大的好处。我不知道您在部分中是否还有其他内容,但是您可以这样写。

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
于 2012-08-27T17:05:53.900 回答