2013-03-03 64 views
0

好吧,我已經看到了很多不同的答案,如何讓Devise在您的應用程序中使用名稱空間時能夠正常工作,但是他們都沒有爲我工作。使用Devise Gem與命名空間引發ActionController :: RoutingError

我有我的應用程序分爲三個命名空間

首頁(公衆着陸頁) 帳戶(登錄的個人資料/帳戶的用戶) 聯繫(這是沒有寫管理員後臺)

我也將所有部分拆分爲每個名稱空間中的base文件夾。所以,我的每一個控制器,從從ApplicationController繼承BaseController繼承:

module Account 
     class UsersController < BaseController 
     end 
    end 

我開了兩個賬戶sessions_controller.rb和家庭從色器件會話控制器這樣的繼承:

module Account 
    class SessionsController < BaseController < Devise::SessionsController 
    end 
end 

的目標是在主頁命名空間中有一個登錄/註冊表單,讓用戶登錄到帳戶命名空間中的用戶控制器。

<%= link_to "register", new_user_registration_path %>

我越來越

ActionController::RoutingError at /users/sign_up 
uninitialized constant Account::RegistrationsController 

我的routes.rb文件看起來像這樣:

scope :module => "account" do 
     devise_for :users, :controllers => { :sessions => "account/sessions" } 
     resource :users 
     end 

     scope :module => "home" do 
     resources :home, :about, :jobs, :terms, :privacy, :android_availability, :about, :contact 
     end 

     get "home/index" 
     root :to => 'home::home#index' 
end 

現在通過當我點擊鏈接生成

家庭控制器使用家庭佈局,帳戶控制器使用應用程序離子佈局。我在家庭控制器中指定了layout "home",但我沒有在帳戶控制器中指定layout "application",因爲應用程序是rails尋找的默認佈局。

好的。我想我已經涵蓋了所有的基地。任何想法我在這裏做錯了嗎?

謝謝!

編輯:

好吧,我以同樣的方式與上述sessions_controller.rb文件添加一個registrations_controller.rb文件到該帳戶命名空間。

我也更新了routes.rb文件:

scope :module => "account" do 
    devise_for :users, :controllers => { 
     :sessions => "account/sessions", 
     :registrations => "account/registrations" } 
    resource :users 
    end 

現在我得到一個新的錯誤,我不明白。它是:

NoMethodError at /users/sign_up 
undefined method `action' for Account::RegistrationsController:Class 

它說未定義的方法'行動'在(gem) actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb這是沒有任何意義的。

具體是說,問題就在這裏:

def dispatch(controller, action, env) 
    controller.action(action).call(env) 
end 

編輯2:

下面是代碼從我registrations_controller.rb

module Account 
    class RegistrationsController < BaseController < Devise::RegistrationsController 
    end 
end 

編輯3:

module Account 
    class BaseController < ApplicationController 
    end 
end 

好的,以上是我的base_controller.rb,它只是繼承ApplicationController。所有其他控制器都從BaseController繼承。因爲我已將應用程序拆分爲三個名稱空間,所以base_controller會告訴名稱空間中的其他控制器,這些部分位於名稱空間內名爲base的文件夾中。如this RailsCast

如果我不包含BaseController因爲設計控制器無法找到部分,我會得到缺失的部分錯誤。

回答

1

閱讀您的錯誤! :-)

對於初學者來說,看起來像你需要定義一個Account::RegistrationsController,就像你的Account::SessionsController一樣。

+0

真的嗎?!我以爲SessoinsController繼承了其餘的控制器,所以我不必那樣做。我現在就做,看看會發生什麼。謝謝! – Arel 2013-03-03 21:51:47

+0

我更新了我的問題,添加了RegistrationsController後出現了新的錯誤。 – Arel 2013-03-03 22:35:32

+0

你可以發佈你的'Account :: RegistrationsController'類和路徑嗎?上面的那個文件名是大寫的,但我不確定這是不是一個錯誤。 – 2013-03-04 05:03:51

相關問題