Ruby on rails 使用名称空间抛出ActionController::RoutingError的Desive Gem
好的,关于如何在应用程序中使用名称空间时让designe工作,我已经看到了很多不同的答案,但没有一个对我有效 我将我的应用程序分为三个名称空间 主页(公共登录页) 帐户(用户的登录配置文件/帐户) 管理(尚未编写的管理后端) 我还将所有部分拆分为每个名称空间中的Ruby on rails 使用名称空间抛出ActionController::RoutingError的Desive Gem,ruby-on-rails,devise,namespaces,ruby-on-rails-3.2,Ruby On Rails,Devise,Namespaces,Ruby On Rails 3.2,好的,关于如何在应用程序中使用名称空间时让designe工作,我已经看到了很多不同的答案,但没有一个对我有效 我将我的应用程序分为三个名称空间 主页(公共登录页) 帐户(用户的登录配置文件/帐户) 管理(尚未编写的管理后端) 我还将所有部分拆分为每个名称空间中的base文件夹。因此,我的每个控制器都继承自BaseController,后者继承自ApplicationController: module Account class UsersController < Bas
base
文件夹。因此,我的每个控制器都继承自BaseController
,后者继承自ApplicationController
:
module Account
class UsersController < BaseController
end
end
目标是在主命名空间中有一个登录/注册表单,允许用户登录到帐户命名空间中的用户控制器
现在,当我单击由以下内容生成的链接时:
我要走了
ActionController::RoutingError at /users/sign_up
uninitialized constant Account::RegistrationsController
我的routes.rb文件如下所示:
module Account
class SessionsController < BaseController < Devise::SessionsController
end
end
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\u controller.rb
文件,方法与上面描述的sessions\u 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
它说未定义的方法“action”在(gem)actionpack-3.2.11/lib/action\u dispatch/routing/route\u set.rb中,这没有任何意义
具体地说,问题在于:
def dispatch(controller, action, env)
controller.action(action).call(env)
end
编辑2:
这是我的registrations\u controller.rb中的代码
module Account
class RegistrationsController < BaseController < Devise::RegistrationsController
end
end
模块帐户
类注册控制器<基本控制器<设计::注册控制器
结束
结束
编辑3:
module Account
class BaseController < ApplicationController
end
end
模块帐户
类BaseController<应用程序控制器
结束
结束
好的,上面是我的base\u controller.rb
,它只是从ApplicationController
继承的。所有其他控制器都继承自BaseController
。因为我已经将我的应用程序拆分为三个名称空间,所以base_控制器在那里告诉名称空间中的其他控制器部分位于名称空间中名为base
的文件夹中。如中所示
如果我没有包含BaseController
,我会得到一个缺少的部分错误,因为designe控制器找不到部分 阅读您的错误!:-)
首先,看起来您需要定义一个帐户::注册控制器
,就像您定义帐户::会话控制器
一样,真的吗?!我认为SessoinsController继承了其他控制器,所以我不必这么做。我现在就做,看看会发生什么。谢谢添加RegistrationController后,我用新的错误更新了我的问题。你能发布你的帐户::RegistrationController
类和路径吗?上面的文件名是大写的,但我不确定是否输入错误。我刚刚用registrations\u controller.rb类更新了我的问题。registrations_controller.rb文件为小写。那是个打字错误。我修好了。你所说的道路是什么意思?路线是什么?或者我在编辑2中发布了什么?我不知道我以前怎么会错过这个:Ruby没有多重继承。在这种情况下,您的<代码>帐户::RegistrationsController < /代码>将需要从<代码> DESIX继承::RegistrationsController < /C> >,因此,如果您需要的话,可以考虑使用<代码> BaseCeCufter < /Case>一个MIXIN。