【问题标题】:Rails, Devise - Admin trying to edit another user profile, own profile loaded insteadRails,Devise - 管理员试图编辑另一个用户配置文件,而是加载了自己的配置文件
【发布时间】:2014-03-14 02:07:45
【问题描述】:

作为使用 Rails 开发的新手,我试图了解以下内容: 我正在使用 Devise + Cancan + olify 应用程序来尝试创建身份验证和用户管理。 我已经对一般用户行为进行了排序,我正在努力让管理员用户能够编辑另一个用户个人资料。

目前,管理员用户可以列出用户并尝试编辑其他用户的个人资料。然而,当进入编辑页面时,尽管 URL/路由对我来说是正确的,我仍然会看到表单中的“currentuser”/admin 信息。

简而言之,场景: UserId1 是管理员 UserId1 正在尝试编辑 UserId2 的配置文件

作为 UserId1 记录,以下路由带来了 UserId1 而不是 UserId2 的详细信息: http://localhost:3000/d/users/edit.2

这里是 routes.rb:

devise_for :users, :path_prefix => 'd', :controllers => { :registrations => 'registrations' }

namespace :admin do
  get '', to: 'dashboard#index', as: '/'
  resources :users
end

这是 users#index 视图:

<table>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td><%= user.id %></td>
        <td><%= user.first_name %></td>
        <td><%= user.last_name %></td>
        <td><%= user.email %></td>
        <td>
          <%= link_to edit_user_registration_path(user) %>
        </td>
        <td>
          <%= link_to registration_path(user),class: "red", :data => { :confirm => "Are you sure?" }, :method => :delete %>
        </td>
      </tr>
    <% end %>
  </tbody>
</table>

这里是 users_controller.rb:

class Admin::UsersController < ApplicationController
  def index
    @users = User.all
  end
end

感谢任何帮助!


编辑 1

rake routes 给了我以下信息:

    Prefix Verb               URI Pattern                         Controller#Action
new_user_session          GET    /d/users/sign_in(.:format)          devise/sessions#new
user_session              POST   /d/users/sign_in(.:format)          devise/sessions#create
destroy_user_session      DELETE /d/users/sign_out(.:format)         devise/sessions#destroy
user_password             POST   /d/users/password(.:format)         devise/passwords#create
new_user_password         GET    /d/users/password/new(.:format)     devise/passwords#new
edit_user_password        GET    /d/users/password/edit(.:format)    devise/passwords#edit
                          PATCH  /d/users/password(.:format)         devise/passwords#update
                          PUT    /d/users/password(.:format)         devise/passwords#update
cancel_user_registration  GET    /d/users/cancel(.:format)           registrations#cancel
user_registration         POST   /d/users(.:format)                  registrations#create
new_user_registration     GET    /d/users/sign_up(.:format)          registrations#new
edit_user_registration    GET    /d/users/edit(.:format)             registrations#edit
                          PATCH  /d/users(.:format)                  registrations#update
                          PUT    /d/users(.:format)                  registrations#update
                          DELETE /d/users(.:format)                  registrations#destroy
user_confirmation         POST   /d/users/confirmation(.:format)     devise/confirmations#create
new_user_confirmation     GET    /d/users/confirmation/new(.:format) devise/confirmations#new
                          GET    /d/users/confirmation(.:format)     devise/confirmations#show
user_unlock               POST   /d/users/unlock(.:format)           devise/unlocks#create
new_user_unlock           GET    /d/users/unlock/new(.:format)       devise/unlocks#new
                          GET    /d/users/unlock(.:format)           devise/unlocks#show
root                      GET    /                                   pages#home
about                     GET    /about(.:format)                    pages#about
admin                     GET    /admin(.:format)                    admin/dashboard#index
admin_users               GET    /admin/users(.:format)              admin/users#index
                          POST   /admin/users(.:format)              admin/users#create
new_admin_user            GET    /admin/users/new(.:format)          admin/users#new
edit_admin_user           GET    /admin/users/:id/edit(.:format)     admin/users#edit
admin_user                GET    /admin/users/:id(.:format)          admin/users#show
                          PATCH  /admin/users/:id(.:format)          admin/users#update
                          PUT    /admin/users/:id(.:format)          admin/users#update
                          DELETE /admin/users/:id(.:format)          admin/users#destroy

【问题讨论】:

  • 我遇到了同样的问题。这是我的解决方案here

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


【解决方案1】:
<%= link_to edit_user_registration_path(user) %>

仍然指向你的设计路线,应该是:

<%= link_to edit_admin_user_path(user) %>

这在 rake 路由中有所描述。

【讨论】:

  • 我试过了,并在 Users_controller 的 CRUD/编辑中加上了 redirect_to edit_user_registration_path(user),但没有任何成功。
  • 感谢您 - 我的错误来自尝试将 Devise CRUD 与不同的资源一起使用,因此无法正常工作。我现在在相关的 admin:user 控制器中创建了 CRUD 操作,它让我更进一步。
【解决方案2】:

你的问题源于路由应该以edit/2而不是edit.2结尾。 .2 使 Rails 认为您正在尝试访问文件扩展名为 2 的页面,而不是 id 为 2 的用户的用户编辑页面。

尝试运行rake routes 并检查那里列出了哪些路线,以及它们是否与您尝试使用的路线相匹配。

【讨论】:

  • 我已经添加了 rake 路由结果 - 在这里对我来说一切都很好。 edit/2 给我一个“没有路由匹配错误”。此外, UserId1 的 edit.1 工作正常
  • @Neiluj 它适用于用户 ID 1,因为用户编辑路径始终使用当前用户(在您的情况下是用户 1)。似乎您可能需要按照here 所述创建自己的路线。另外,作为一个附带问题,管理员用户路由是什么,您可以通过这些路由编辑任何用户吗?
  • admin 只是用户 admin/console 的命名空间。 admin 内部的用户路由对应于脚手架 Users 资源生成的路由,用于列出 admin 命名空间内的所有用户。希望这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2013-05-25
  • 2014-04-29
相关资源
最近更新 更多