2017-07-17 58 views
1

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

这是“默认”的用户:

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

这是一个错误还是我错误地配置了一些东西?我真的被这种行为难倒了,我甚至不知道如何进行调试。

回答

0

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