You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ActiveAdmin索引页面下方展示新建资源表单?

解决ActiveAdmin在Index页面下方显示新建资源表单的问题

问题原因

你直接在index里渲染_form partial时,缺少了ActiveAdmin表单必需的form标签上下文。原来的form partial: 'form'是在new/edit页面的表单上下文里执行的,那里已经自动生成了form标签并传入了form builder对象(f);而index页面中没有这个上下文,直接渲染partial只会输出字段HTML,不会包裹在form元素内,导致结构损坏。

解决方案

方法1:调整partial并手动构建表单上下文

假设你的app/views/admin/users/_form.html.erb只包含字段内容(不含外层f.inputs或form标签):

<%# _form.html.erb %>
<%= f.input :name %>
<%= f.input :email %>
<%# 其他字段 %>

在index页面中,用active_admin_form_for构建完整的表单,并将form builder对象传入partial:

index do
  # 原有表格列定义
  column :name
  column :email
  # ...其他列

  div id: "new_resource", class: "panel" do
    h3 "新建用户"
    active_admin_form_for [:admin, User.new], url: admin_users_path do |f|
      f.inputs do
        render partial: 'form', locals: { f: f }
      end
      f.actions do
        f.action :submit, label: "创建用户"
      end
    end
  end
end

方法2:兼容原有完整partial

如果你的_form partial已经包含了f.inputs和f.actions(比如和new/edit页面共用):

<%# _form.html.erb %>
<%= f.inputs do %>
  <%= f.input :name %>
  <%= f.input :email %>
<% end %>

<%= f.actions do %>
  <%= f.action :submit %>
<% end %>

则index页面中只需包裹form标签并直接渲染partial:

index do
  # 原有表格列定义...

  div id: "new_resource", class: "panel" do
    h3 "新建用户"
    active_admin_form_for [:admin, User.new], url: admin_users_path do |f|
      render partial: 'form', locals: { f: f }
    end
  end
end

关键注意点

  • 必须指定正确的提交路由:url: admin_users_path(对应创建资源的POST请求)
  • 使用active_admin_form_for而非普通form_for,确保表单样式和ActiveAdmin一致
  • 局部变量f必须正确传入partial,保证字段能关联到form builder

内容的提问来源于stack exchange,提问作者Sprachprofi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:12:46