17

私のアプリケーションには、人々がサインアップできるユーザー アカウントがあります。deviseセットアップには gemを使用します。

また、サイトに登録されているすべてのユーザーとdestroyリンクを一覧表示するユーザー ページもあります。管理者がユーザーを削除して、このユーザー リスト ページにリダイレクトできるようにしたいと考えています。しかし、リンクをクリックして特定のユーザーを破棄すると、ユーザー プロファイル ページにリダイレクトされるだけで、データベースからユーザーが削除されません。

誰かが理由を知っていますか?

**更新: 推奨されるように以下のコードを更新し、現在動作しています。

users_controller.rb

  def destroy
    @user = User.find(params[:id])
    @user.destroy

    if @user.destroy
        redirect_to root_url, notice: "User deleted."
    end
  end

ユーザー/index.html.erb

<div class = "container">
    <div id="usersview">
    <b>USERS DIRECTORY</b>
    <%= render @users %>
</div>

<center>
    <%= will_paginate @users %>
</center>
</div>

ユーザー/_user.html.erb

<div class="comments">
  <%= link_to user.name, user %>
  <% if current_user.try(:admin?) && !current_user?(user) %>
       <%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
  <% end %>
</div>

ルート.rb

devise_for :users    
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user
match 'users/:id' => 'users#show', as: :user
resources :users
4

5 に答える 5

15

Devise は、そのままではこの機能を提供しません。独自の destroy アクションを作成しましたが、そのアクションへのカスタム ルートも作成する必要があります。

あなたのルートで:

 match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user

そして、リンクを作成するとき:

<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
于 2013-04-29T22:40:37.323 に答える
4

あなたのroutes.rbにあると思います:resources :users

問題は、クリックしたときに削除するユーザーを渡していないことです。

ユーザー/_user.html.erb

<%= link_to "Destroy", user, method: :delete, data: { confirm: "You sure?" } %>

2 番目のパラメータで、 user_urlの代わりにuserを追加したことを確認してください。

users_controller.rb

 def destroy
    @user = User.find(params[:id])

    if @user.destroy
        redirect_to root_url, notice: "User deleted."
    end
  end

コントローラーで @user.destroy を削除しました。あなたはそれを2回呼んでいました。

それが役に立てば幸い!

于 2013-04-29T22:54:47.113 に答える
0

または、レール c から、「x」がユーザー ID の場合、次のようなことができます。

user = User.where(id: x)
user.destroy(1) 
于 2014-10-31T02:22:15.677 に答える