我意识到这已被多次询问(我也通过维基阅读)。但我仍然对如何正确保持路线名称保持不变感到困惑。
目前我的设计路线位于下方,使用自定义网址(例如/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
答案 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' }