我有一個用戶模型,我想允許登錄用戶完全刪除他們的賬戶。我能夠允許管理員用戶刪除其他用戶,但對於用戶刪除他們自己的帳戶,它不起作用!我究竟做錯了什麼?允許當前用戶刪除他們的賬戶
users_controller.rb
class UsersController < ApplicationController
before_filter :signed_in_user,
only: [:index, :edit, :update, :destroy, :following, :followers]
before_filter :correct_user, only: [:edit, :update, :destroy]
before_filter :admin_user, only: :destroy
def index
@users = User.paginate(page: params[:page])
end
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Course Management System!"
redirect_to @user
else
render 'new'
end
end
def edit
end
def update
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User destroyed."
redirect_to users_url
end
def following
@title = "Following"
@user = User.find(params[:id])
@users = @user.followed_users.paginate(page: params[:page])
render 'show_follow'
end
def followers
@title = "Followers"
@user = User.find(params[:id])
@users = @user.followers.paginate(page: params[:page])
render 'show_follow'
end
private
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
end
_user.html.erb
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
<% if current_user?(user) %>
| <%= link_to "delete", user, method: :delete %>
<% end %>
<% if current_user.admin? && !current_user?(user) %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</li>
現在,當我點擊 「刪除」,它只是重定向我的主頁,而不刪除用戶。當我是管理員時,我可以刪除沒有問題的其他用戶。
很難說你的before_filter中的邏輯發生了什麼。在你的項目目錄中搜索一個'def admin_user',並用你的問題發佈該代碼。該方法可能在您的一個控制器中,可能位於'application_controller.rb'中。發佈'correct_user'方法定義也是有用的。 – sealocal 2014-12-07 19:03:51