Rails Active Admin 如何为新建模型表单传值预填字段
ActiveAdmin新建表单字段预填充实现方案
调整跳转动作携带预填充参数
- 定位到远程员工资源中定义的
redirect_to_home_worker_create成员动作,修改原有跳转逻辑,将需要预填充的字段以查询参数形式附加在新建居家员工页面的URL上:
# app/admin/remote_staff.rb ActiveAdmin.register RemoteStaff do member_action :redirect_to_home_worker_create, method: :get do redirect_to new_admin_home_worker_path( home_worker: { full_name: resource.full_name, remote_staff_id: resource.id } ) end end
实现表单预填充
方案1(推荐,无冗余表单代码)
直接在HomeWorker资源的控制器层读取传入参数,初始化带默认值的空模型实例,表单会自动加载对象上的属性值作为输入框初始内容,不需要单独给每个字段写初始值逻辑:
# app/admin/home_worker.rb ActiveAdmin.register HomeWorker do controller do def new # 存在预填充参数时,先构建带默认值的实例 if params[:home_worker].present? permitted_attrs = params.permit(home_worker: [:full_name, :remote_staff_id]).require(:home_worker) @home_worker = HomeWorker.new(permitted_attrs) end # 执行ActiveAdmin默认的新建页面渲染流程 super end end end
方案2(无需修改控制器)
如果不想调整控制器逻辑,可以直接在表单定义中,从查询参数读取值,给对应输入框设置初始值:
# app/admin/home_worker.rb 的表单定义块 form do |f| f.inputs "基础信息" do f.input :full_name, input_html: { value: params.dig(:home_worker, :full_name) || f.object.full_name } # 关联ID设置为隐藏字段,确保创建时正确绑定原远程员工 f.input :remote_staff_id, as: :hidden, input_html: { value: params.dig(:home_worker, :remote_staff_id) || f.object.remote_staff_id } end f.actions end
关键注意点
- 关联字段
remote_staff_id必须随表单传递,否则创建的居家员工记录无法和原远程员工建立绑定关系 - 在自定义成员动作中增加权限校验,确保只有有权限操作对应远程员工的用户可以触发跳转,避免越权操作
- 跳转链路中不要传递员工隐私类的敏感字段,避免参数被截取泄露
内容的提问来源于stack exchange,提问作者YellowGuy
相关产品推荐
相关产品推荐

