设计未初始化的常量用户

时间:2012-12-02 01:33:09

标签: ruby-on-rails ruby ruby-on-rails-3 devise

我意识到这已被多次询问(我也通过维基阅读)。但我仍然对如何正确保持路线名称保持不变感到困惑。

目前我的设计路线位于下方,使用自定义网址(例如/user/signup)。

我的模型名为User

路线:

  devise_for :users, :controllers => { :registrations => "registrations" }, :path_names => {
    :sign_up => 'signup'
  }

  devise_for :users, :path => "user", :except => "create", :path_names => { 
    :sign_in  => 'login', 
    :sign_out => 'logout', 
    :password => 'forgot-password', 
    :confirmation => 'verification', 
    :unlock   => 'unblock', 
    :sign_up  => 'signup' 
  } 

我想要做的就是挂钩到创建操作,这样我就可以检查我创建的蜜罐字段是否已填写(以防止垃圾邮件)。这就是我想做的一切。

我希望尽管/user/signup保持我的网址相同。我需要做一个额外的步骤吗?

这是我到目前为止所做的......

/app/controllers/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  def new
    super
  end

  def create
    super
  end

end   

我正在uninitialized constant Users

4 个答案:

答案 0 :(得分:9)

很简单,我需要将控制器放在'用户'文件夹中,并修复了所有内容。 (此外,路径控制器需要为:registrations => "users/registrations"

答案 1 :(得分:1)

您无需为控制器Users::RegistrationsController命名,只需将其命名为RegistrationsController,保留Devise::RegistrationsController的继承权。

我不知道第一个devise_for的目的,但您需要将:controllers => { :registrations => "registrations" }复制/移动到第二个devise_for

答案 2 :(得分:0)

我遇到了同样的错误。 就我而言,它在routes.rb

是:devise_for :users,controllers: {sessions: "users/sessions"}

结果:uninitialized constant Users

直到{sessions: "users/sessions"}我才知道发生了什么 在我的情况下,它应该是user/sessions没有“s”

答案 3 :(得分:0)

devise (4.7.3)rails (6.0.3.3)上,正确的控制器是Session而不是Sessions

您需要将此添加到您的config/route.rb

devise_for :users, controllers: { session: 'users/sessions' }