我的後控制器代碼如下。我想要做的是用戶應該能夠刪除他自己的帖子,並且admin_user可以刪除任何帖子。以下代碼使admin_user可以刪除帖子,但對於普通用戶,當試圖刪除自己的帖子時,它會重定向到root_path如何在before_filter中運行兩個方法?
看來do_authentication不能正常工作,普通用戶試圖通過身份驗證作爲管理員而不是「correct_user」
什麼可能是錯的?
謝謝!
class PostsController < ApplicationController
before_filter :signed_in_user, only: [:index, :create, :destroy]
before_filter :do_authentication, only: :destroy
.
.
.
def destroy
@post.destroy
flash[:success] = "Post deleted!"
redirect_back_or user_path(current_user)
end
private
def do_authentication
correct_user || admin_user
end
def correct_user
@post = current_user.posts.find_by_id(params[:id])
redirect_to user_path(current_user) if @post.nil?
end
def admin_user
@post = Post.find_by_id(params[:id])
redirect_to(root_path) unless current_user.admin?
end
謝謝。我終於找到了一種可行的方式。實際上比我想象的更容易 def do_authentication if current_user.admin? (post_find_by_id(params [:id]) else @ post = current_user.posts.find_by_id(params [:id]) redirect_to user_path(current_user)if @ post.nil?結束 結束 – alexZ