【发布时间】:2018-06-04 21:14:14
【问题描述】:
假设我需要不同类型的帖子创建/编辑页面,每个页面都优化了不同类型的帖子,将显示一些属性来编辑它们并隐藏其他。我想在顶部选择 2 或 3 个收集操作 [“创建 XX 帖子”、“创建 YY 帖子”等]。我怎样才能做到这一点?
【问题讨论】:
标签: ruby-on-rails forms activeadmin
假设我需要不同类型的帖子创建/编辑页面,每个页面都优化了不同类型的帖子,将显示一些属性来编辑它们并隐藏其他。我想在顶部选择 2 或 3 个收集操作 [“创建 XX 帖子”、“创建 YY 帖子”等]。我怎样才能做到这一点?
【问题讨论】:
标签: ruby-on-rails forms activeadmin
如果您想对单个资源使用不同的形式,那么可能是这样的:
action_item :new_xx_post do
params = { post: { type: 'XX' } }
link_to 'New XX Post', new_post_path(params)
end
controller do
def new
build_resource
render resource.type == 'XX' ? 'xx_form' : 'yy_form'
end
end
Rails 会像往常一样在您的应用程序/视图/帖子中查找 _xx_form 部分。这涉及到更高级的 ActiveAdmin 自定义,因此请确保您想要这样做,而不仅仅是普通的 Rails。
【讨论】:
permit_params 中添加一些条件并设置type,以防万一。
您可以多次注册 ActiveRecord 模型with different names,例如。
ActiveAdmin.register Post, as: "XxPost" do ... end
ActiveAdmin.register Post, as: "YyPost" do ... end
交替使用STI 对 ActiveRecord 模型进行子类化并注册子类。
【讨论】: