ActiveAdmin DSL 生成的典型表单可能如下所示:
ActiveAdmin.register Post do
...
form do |f|
f.inputs do
f.input :title
f.input :content
end
f.actions
end
...
end
f.actions
位呈现提交按钮和取消链接。问题是后者的目标始终是索引页。相反,对于以前保留的记录,我希望返回到显示页面。作为一种可能的解决方法,f.actions
可以替换为:
f.actions do
f.action :submit
if resource.persisted?
f.cancel_link({action: :show})
else
f.cancel_link
end
end
然而,这看起来冗长且笨拙。我是否缺少一些更惯用的技巧来完成同样的任务?
它并不比你现在拥有的好多少,但这很有效:
f.cancel_link(action: f.object.persisted? ? :show : :index)
更有趣的是,您可以通过以下方式重定向到任意目标(甚至不在当前控制器中,这是让我想到这个问题的用例):
form do |f|
# ...
f.actions do
f.action :submit
f.cancel_link(action: :redirect_shim)
end
end
member_action :redirect_shim do
redirect_to(admin_whatever_path(resource.some_association))
end