好吧,我已經看到了很多不同的答案,如何讓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
因爲設計控制器無法找到部分,我會得到缺失的部分錯誤。
真的嗎?!我以爲SessoinsController繼承了其餘的控制器,所以我不必那樣做。我現在就做,看看會發生什麼。謝謝! – Arel 2013-03-03 21:51:47
我更新了我的問題,添加了RegistrationsController後出現了新的錯誤。 – Arel 2013-03-03 22:35:32
你可以發佈你的'Account :: RegistrationsController'類和路徑嗎?上面的那個文件名是大寫的,但我不確定這是不是一個錯誤。 – 2013-03-04 05:03:51