好的,我在应用程序中使用命名空间时看到了大量不同的答案,但是没有一个能为我工作。
我的应用程序分为三个命名空间
主页(公共目标网页) 帐户(用户登录的个人资料/帐户) 管理员(尚未编写的管理员后端)
我还将所有部分分成每个命名空间中的base
文件夹。因此,我的每个控制器都继承自BaseController
:
ApplicationController
module Account
class UsersController < BaseController
end
end
我在帐户和家中创建了一个sessions_controller.rb
,它继承自设计会话控制器,如下所示:
module Account
class SessionsController < BaseController < Devise::SessionsController
end
end
目标是在Home命名空间中有一个登录/注册表单,允许用户登录到帐户命名空间中的用户控制器。
现在,当我点击生成的链接时:
<%= 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寻找的默认布局。
确定。我想我已经涵盖了我的所有基础。知道我在这里做错了吗?
谢谢!
编辑:
好的,我已经以与上述registrations_controller.rb
文件相同的方式向帐户命名空间添加了sessions_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
,我会得到一个丢失的部分错误,因为设计控制器无法找到部分错误。
答案 0 :(得分:1)
阅读你的错误! : - )
首先,看起来您需要定义Account::RegistrationsController
,就像您Account::SessionsController
一样。