我正在尝试将Devise添加到现有的Rails 3.2.16应用程序中。
我的基础工作正常,但我想创建一个管理员角色,可以在不输入密码的情况下编辑任何用户个人资料。
我使用了Devise Wiki "Add An Admin Role" section中选项2 - 添加管理员属性中的代码来设置管理员角色。
我的routes.rb有:
devise_for :users, :controllers => { :registrations => :registrations }
scope "/admin" do
resources :users
end
这给了我以下路线
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format)devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) registrations#cancel
user_registration POST /users(.:format) registrations#create
new_user_registration GET /users/sign_up(.:format) registrations#new
edit_user_registration GET /users/edit(.:format) registrations#edit
PUT /users(.:format) registrations#update
DELETE /users(.:format) registrations#destroy
admin_edit_user GET /admin/users/:id/edit(.:format) users/registrations#edit
users GET /admin/users(.:format) users#index
POST /admin/users(.:format) users#create
new_user GET /admin/users/new(.:format) users#new
edit_user GET /admin/users/:id/edit(.:format) users#edit
user GET /admin/users/:id(.:format) users#show
PUT /admin/users/:id(.:format) users#update
DELETE /admin/users/:id(.:format) users#destroy
用户视图(设计/注册/编辑等)正确连接并且工作正常,但是管理员视图都是从用户文件夹(用户/编辑等)中提取的,这意味着他们绕过了Devise。 / p>
例如,我的管理员用户编辑表单应该在form_for中有一些变化:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
但该代码不会引入任何用户数据(所有表单字段都为空)。我可以让它出现的唯一方法是使用旧代码:
<%= form_for @user do |f| %>
然后使用我的users_controller中的update方法,而不是来自Devise registrations_controller。
我在路线上尝试了很多变化,因为这似乎是关键,但我的尝试没有奏效。帮助
答案 0 :(得分:0)
为了让您的form_for
助手通过Devise正确路由您的请求,您需要将admin/users
资源路由声明为设计路由:
# config/routes.rb
devise_for :users, :controllers => { :registrations => :registrations }
scope "/admin" do
devise_for :users, :controllers => { :registrations => :registrations }
end
您可以继续保留Devise功能,同时可以使用admin
命名空间进行授权。