我正在尝试覆盖默认设计注册控制器的某些功能,以便只有某些用户可以为其他用户创建帐户。因此,在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"}
答案 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
等其他内容。