我在Active Admin中有许多模型,它们具有非常相似(但不完全相同)的显示页面,如下所示:
show do |ad|
attributes_table do
row :name
row :length
row :width
row :height
...
end
panel "Images" do
text_node link_to 'Add Image', new_admin_image_path(...)
table_for ad.images do
column "Image" do |image|
image_tag(...)
end
column do |data|
link_to :edit, edit_admin_image_path(...)
end
column do |data|
link_to :delete, admin_image_path(data), method: :delete
end
end
end
end
面板"图像"代码将在每个模型中完全复制,所以我想把它放在其他地方。我一直在ViewHelper和渲染部分路径,但在这两种情况下,我最终的东西不知道什么"面板","text_node","table_for"等是。什么才是正确的做法?
ActiveAdmin使用的模板语言Arbre支持部分。你可以将重复的代码移动到arb
部分中,例如app/views/admin/_images_panel.html.arb
。然后是ActiveAdmin资源可以简单地调用render
与部分路径和任何需要的本地变量。
show do
attributes_table do
# ...
end
render 'admin/images_panel', data: data
end
部分也可以参考通用方法resource
来消除需要传入局部变量。资源就是任何资源Admin负责管理。例如:
panel "Images" do
table_for resource.images do
# Note use of `resource` instead of `ad` above.
# ...
end
end