Active Admin需求:表格上方展示表单及无记录时表单不显示问题
解决Active Admin表格无记录时表单消失的问题
嘿,这个问题我之前也碰到过!Active Admin默认在没有资源记录的时候,会把index页面里的部分自定义内容给隐藏掉,导致你的表单跟着消失。给你两个靠谱的解决方案:
方案一:把表单放在全局content块中(推荐)
这个方法能让表单始终显示在表格上方,不管表格有没有数据。核心是把表单从index块移到content块里,这样它就不会受表格空状态的影响:
ActiveAdmin.register YourModel do content do # 渲染查询表单 panel "查询条件" do form url: admin_your_models_path, method: :get do |f| # 这里添加你的表单字段,比如: f.input :name, label: "名称" f.input :created_at, label: "创建时间", as: :date_range f.actions do f.submit "搜索" end end end # 调用默认的index内容(表格+空状态提示) super() end index do # 定义你的表格列 column :name column :created_at column :updated_at actions end end
原理是:content块负责渲染页面的整体内容,super()会调用Active Admin默认的index渲染逻辑(包括表格和空状态提示),而我们提前放进去的panel表单会一直保留在页面顶部,不受表格数据是否存在的影响。
方案二:拆分表单和结果到两个独立页面
如果更倾向于分开的页面结构,可以创建一个专门的搜索页面,提交后跳转到结果列表页:
ActiveAdmin.register YourModel do # 添加自定义搜索页面的action collection_action :search, method: :get do # 初始化空模型用于表单构建 @your_model = YourModel.new render :search end # 调整菜单,添加搜索和列表入口 menu do item "搜索", action: :search, priority: 1 item "结果列表", action: :index, priority: 2 end index do # 定义表格列 column :name column :created_at actions end end
然后在app/views/admin/your_models/目录下创建search.html.erb模板,内容如下:
<%= active_admin_form_for @your_model, url: admin_your_models_path, method: :get do |f| %> <%= f.input :name, label: "名称" %> <%= f.input :created_at, as: :date_range %> <%= f.actions do %> <%= f.submit "搜索结果" %> <% end %> <% end %>
这样用户先在搜索页面填写条件,提交后跳转到结果列表页,即使列表没有数据,表单也在独立的页面里,不会消失。
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

