ActiveAdmin Inherited Ressource覆盖不适用于多个名称空间?

时间:2017-07-17 14:22:38

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

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

这是"默认"用户:

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中的更新命名空间用户资源。

这是一个错误还是我错误配置了什么?我老老实实地被这种行为所困扰,我甚至不知道如何继续进行调试。

1 个答案:

答案 0 :(得分:0)

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