2017-07-17 4 views
1

J'utilise ActiveAdmin sans espace de nom par défaut (config.default_namespace = false). J'ai une ressource User sans espace de noms ainsi qu'une ressource User dans l'espace de noms :admin. Les deux utilisent des méthodes de mise à jour personnalisées pour obtenir un comportement différent (les utilisateurs peuvent modifier leurs propres données, tandis que les administrateurs peuvent réinitialiser le mot de passe de n'importe quel utilisateur).ActiveAdmin Inherited Ressource override ne fonctionne pas avec plusieurs espaces de noms?

Ceci est l'utilisateur « par défaut »:

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 

Et ceci est l'utilisateur admin:

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 

Modification des données utilisateur fonctionne très bien, ainsi que l'invitation de nouveaux utilisateurs. Le problème est la réinitialisation du mot de passe. Lors de l'envoi du formulaire correspondant (route /admin/users/[id]/edit), le update des utilisateurs non nominatifs est appelé (comme lors de la soumission de /users/[id]/edit) au lieu de la mise à jour dans ma ressource utilisateur de l'espace de noms :admin.

Est-ce un bug ou ai-je mal configuré quelque chose? Je suis honnêtement perplexe devant ce comportement, je ne sais même pas comment procéder pour le déboguer.

Répondre

0

Le problème n'était pas dû aux espaces de noms, mais à cause de ma forme ... J'utilise semantic_form_for, qui configure automatiquement tout ce qui est basé sur le modèle. Comme il reçoit un User, l'action de formulaire envoie toujours les données à la route par défaut User au lieu de la route :admin. La définition manuelle de l'URL a corrigé le problème.