使用管理员角色设计路由问题

时间:2013-12-27 20:25:37

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

我正在尝试将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。

我在路线上尝试了很多变化,因为这似乎是关键,但我的尝试没有奏效。帮助

1 个答案:

答案 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命名空间进行授权。