2016-04-12 5 views
1

Ich habe die folgenden RoutenSub-Domäne nicht mit Devise Routen arbeitet

constraints :subdomain => "brands" do 
    scope :module => "brands", :as => "brands" do 

     devise_for :members 

     # devise_for :users, controllers: { 
     # sessions: 'users/sessions' 
     # } 


    end 
    end 

Wenn ich zu http://brands.lvh.me:3000/members/sign_up gehe ich erhalte die folgenden Fehler

Action :: RoutingError an/Mitglieder/sign_up

nicht initialisierte Konstante Marken :: RegistrationsController Anwendung Frames Alle Frames

ActionDispatch::Routing::RouteSet::Dispatcher#controller 
actionpack (4.2.5.2) lib/action_dispatch/routing/route_set.rb, line 63 

Registrierungskontroller - `app/controllers/Marken/Mitglieder/registrations_controller.rb

class Brands::Members::RegistrationsController < Devise::RegistrationsController 
# before_action :configure_sign_up_params, only: [:create] 
# before_action :configure_account_update_params, only: [:update] 

    # GET /resource/sign_up 
    # def new 
    # super 
    # end 

    # POST /resource 
    # def create 
    # super 
    # end 

    # GET /resource/edit 
    # def edit 
    # super 
    # end 

    # PUT /resource 
    # def update 
    # super 
    # end 

    # DELETE /resource 
    # def destroy 
    # super 
    # end 

    # GET /resource/cancel 
    # Forces the session data which is usually expired after sign 
    # in to be expired now. This is useful if the user wants to 
    # cancel oauth signing in/up in the middle of the process, 
    # removing all OAuth session data. 
    # def cancel 
    # super 
    # end 

    # protected 

    # If you have extra params to permit, append them to the sanitizer. 
    # def configure_sign_up_params 
    # devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute]) 
    # end 

    # If you have extra params to permit, append them to the sanitizer. 
    # def configure_account_update_params 
    # devise_parameter_sanitizer.permit(:account_update, keys: [:attribute]) 
    # end 

    # The path used after sign up. 
    # def after_sign_up_path_for(resource) 
    # super(resource) 
    # end 

    # The path used after sign up for inactive accounts. 
    # def after_inactive_sign_up_path_for(resource) 
    # super(resource) 
    # end 
end 
+0

Ich denke, wenn Sie scope: scope: modul => "marks" entfernen,: as => "brands" tun es wird gut funktionieren. –

+0

@MuhammadYawarAli, aber meine Controller und Ansichten sind mit einem Namen versehen –

+0

In einer mandantenfähigen App von mir, mit Subdomains und einem Bereich für Locales, sieht alles wie du aus. Der einzige Unterschied, den ich habe, sind die Controller, die ich überschreiben kann. Vielleicht können Sie die gleiche Überschreibung ausführen, aber mit einem leeren Controller, der vom Devise-Controller erbt. Und in den Routen geben Sie einfach als 'devise_for: Mitglieder, Controller: {: Sitzungen =>" Ihre_Scope/Sitzungen "}' –

Antwort

1

Antwort aus den Kommentaren:

erstellen Controller die devise eine außer Kraft zu setzen. Fügen Sie dort etwas Bestimmtes hinzu oder erben Sie einfach vom Devise-Controller.

Dann in Ihren Routen können Sie entwickeln sagen den Controller Sie gerade eingestellt mit verwenden:

devise_for :members, controllers: {:sessions => "your_scope/sessions"} 

Devise doc (see section about configuring controllers and routes)

Die „your_scope“ in dem obigen Code wird auf die Frage bezogen, die einen gebrauchten spezifischer Umfang.

gedacht: Device muss mit der Subdomain und Umfang Sache verloren sein und nicht herauszufinden, welche und wo der Controller sein soll. Also, wenn ich wahr bin, kannst du sogar den benutzerdefinierten Controller-Teil überspringen und Devise nur mitteilen, dass es eigene und Standard-Controller verwenden soll. Kurz gesagt, informieren Sie das Gerät, um den Umfang zu vergessen und den klassischen Standardmechanismus zu verwenden.