【问题标题】:ActiveAdmin Inherited Ressource override doesn't work with multiple namespaces?ActiveAdmin 继承的资源覆盖不适用于多个命名空间?
【发布时间】:2017-12-22 03:23:26
【问题描述】:

我正在使用没有默认命名空间 (config.default_namespace = false) 的 ActiveAdmin。我有一个没有命名空间的 User 资源以及 :admin 命名空间中的 User 资源。两者都使用自定义更新方法来实现不同的行为(用户可以更改自己的数据,而管理员可以重置任何用户的密码)。

这是“默认”用户:

ActiveAdmin.register User do
  actions :show, :edit, :update
  menu false
  permit_params ...

  controller do
    def update
      # change account data
      ...
    end
  end

  form do |f|
    ...
  end
end

这是管理员用户:

ActiveAdmin.register User, namespace: :admin do
  actions :all
  menu
  permit_params ...

  controller do
    def create
      # invitation code
      ...
    end

    def update
      # password reset code
      ...
    end
  end

  index do
    ...
  end

  filter ...

  form partial: 'form'
end

更改用户数据以及邀请新用户都可以正常工作。问题是密码重置。在提交相应的表单(路由/admin/users/[id]/edit)时,调用非命名空间用户的update(与提交/users/[id]/edit时相同),而不是在我的:admin命名空间用户资源中更新。

这是一个错误还是我配置错误?老实说,我被这种行为难住了,我什至不知道如何继续调试。

【问题讨论】:

    标签: ruby-on-rails activeadmin inherited-resources


    【解决方案1】:

    问题不是因为命名空间,而是因为我的表单...... 我正在使用semantic_form_for,它会根据模型自动配置所有内容。由于它接收到User,因此表单操作将始终将数据发送到默认的User 路由而不是:admin 路由。手动设置 url 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-12
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2012-10-04
      相关资源
      最近更新 更多