gpt4 book ai didi

ruby-on-rails - 使用带有命名空间的设计 Gem 抛出 ActionController::RoutingError

转载 作者:行者123 更新时间:2023-12-04 17:04:31 27 4
gpt4 key购买 nike

好的,我已经看到了很多关于在应用程序中使用命名空间时如何让 Devise 工作的不同答案,但没有一个对我有用。

我将我的应用程序分成三个命名空间

主页(公共(public)登录页面)
帐户(用户登录的个人资料/帐户)
Admin(尚未编写的管理后端)

我还将所有部分拆分为 base每个命名空间中的文件夹。所以我的每个 Controller 都继承自 BaseController它继承自 ApplicationController :

   module Account
class UsersController < BaseController
end
end

我创建了一个 sessions_controller.rb在从设计 session Controller 继承的帐户和家庭中,如下所示:
module Account
class SessionsController < BaseController < Devise::SessionsController
end
end

目标是在 Home 命名空间中有一个登录/注册表单,让用户登录到帐户命名空间中的用户 Controller 。

现在,当我单击由以下生成的链接时:
<%= 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

家庭 Controller 使用家庭布局,账户 Controller 使用应用程序布局。我指定 layout "home"在家庭 Controller 中,但我没有指定 layout "application"在帐户 Controller 中,因为应用程序是 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

它说未定义的方法“ Action ”在 (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 .所有其他 Controller 都继承自 BaseController .因为我已将我的应用程序拆分为三个命名空间,所以 base_controller 会告诉命名空间中的其他 Controller 部分位于名为 base 的文件夹中。在他们的命名空间中。如 this RailsCast所示

如果我不包含 BaseController,我会得到一个缺失的部分错误因为设计 Controller 找不到部分。

最佳答案

阅读你的错误! :-)

首先,看起来您需要定义一个 Account::RegistrationsController ,就像你做你的 Account::SessionsController 一样.

关于ruby-on-rails - 使用带有命名空间的设计 Gem 抛出 ActionController::RoutingError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15188971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com