设计覆盖注册控制器 - 未初始化的常量用户:: RegistrationsController

时间:2011-12-11 19:33:34

标签: ruby-on-rails-3.1 devise

我正在尝试覆盖默认设计注册控制器的某些功能,以便只有某些用户可以为其他用户创建帐户。因此,在controllers / users文件夹下名为registrations_controller.rb的文件中,我有以下内容

class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :check_permissions, :only => [:new, :create, :cancel]
  skip_before_filter :require_no_authentication

  def check_permissions
    authorize! :create, resource
  end
end

在我的路线文件中我有

devise_for:users,:controllers =&gt; {:registrations =&gt; '用户/注册'}

当我尝试转到users / sign_up url时,我收到一个路由错误'未初始化的常量Users :: RegistrationsController'。

所以真正让我了解的是,我在rails 3应用程序中使用了几乎完全相同的功能而没有任何问题。我看了一些类似于此的其他stackoveflow问题,我仍然没有更聪明。我现在正在构建的应用程序是rails 3.1应用程序,我正在使用设计1.5.1

以下是它们有用的相关路线

new_user_session GET    /users/sign_in(.:format)                                      {:action=>"new", :controller=>"devise/sessions"}
                         user_session POST   /users/sign_in(.:format)                                    {:action=>"create", :controller=>"devise/sessions"}
                 destroy_user_session DELETE /users/sign_out(.:format)                                   {:action=>"destroy", :controller=>"devise/sessions"}
                        user_password POST   /users/password(.:format)                                   {:action=>"create", :controller=>"devise/passwords"}
                    new_user_password GET    /users/password/new(.:format)                               {:action=>"new", :controller=>"devise/passwords"}
                   edit_user_password GET    /users/password/edit(.:format)                              {:action=>"edit", :controller=>"devise/passwords"}
                                      PUT    /users/password(.:format)                                   {:action=>"update", :controller=>"devise/passwords"}
             cancel_user_registration GET    /users/cancel(.:format)                                     {:action=>"cancel", :controller=>"users/registrations"}
                    user_registration POST   /users(.:format)                                            {:action=>"create", :controller=>"users/registrations"}
                new_user_registration GET    /users/sign_up(.:format)                                    {:action=>"new", :controller=>"users/registrations"}
               edit_user_registration GET    /users/edit(.:format)                                       {:action=>"edit", :controller=>"users/registrations"}
                                      PUT    /users(.:format)                                            {:action=>"update", :controller=>"users/registrations"}
                                      DELETE /users(.:format)                                            {:action=>"destroy", :controller=>"users/registrations"}

6 个答案:

答案 0 :(得分:15)

我想说,你的文件名有问题。

您的文件应该被称为users/registrations_controller.rb

这适合我。

答案 1 :(得分:3)

您的registrations_controller.rb保存在哪里?位置很重要。我发现我把它保存到app/controllers/devise/.时出错了。它只需要保存在app/controllers/.例如:

app/controllers/registrations_controller.rb


此外,config/routes.rb路由应定义为:

devise_for :users, controllers: { registrations: 'registrations' }

答案 2 :(得分:2)

我尝试了你放在这里的相同设置,但它对我有用。我将application上传到github(我也上传了日志,所以你可以看到它确实有效)。

仔细检查可能的拼写错误。也许你忘了复数或类名上有拼写错误。

答案 3 :(得分:0)

您好,我刚刚在注册时添加了名字和姓氏。我正在使用Rails 4.

我使用以下说明/教程来完成此任务:

http://www.jacopretorius.net/2014/03/adding-custom-fields-to-your-devise-user-model-in-rails-4.html

:)

答案 4 :(得分:0)

如果您已生成视图移动视图文件

我假设您已经使用rails generate devise:视图生成设计视图。将views / devise / registrations文件夹移动到views / users ,我想你也应该改变表格中的_path

答案 5 :(得分:0)

执行rails routes并检查config/routes中的路线,确认路线中可能有拼写错误。

而不是registrationS#new您可能还有registration#new等其他内容。