我正在尝试让管理员能够删除用户的帖子。 这是我在post.html.erb中使用的代码
<% if current_user.admin? %>
<%= link_to "delete", post, method: :delete %>
<% end %>
这就是我在控制器中的内容
class PostsController < ApplicationController
before_filter :signed_in_user
before_filter :admin_user, only: :destroy
before_filter :correct_user, only: :destroy
def destroy
@post.destroy
redirect_to root_path
end
private
def correct_user
@post = current_user.posts.find_by_id(params[:id])
redirect_to root_path if @post.nil?
end
我能够让它为correct_user工作,但不能用于管理员。我收到此错误消息
undefined local variable or method `admin_user' for #<PostsController:0x5fda230>
我尝试将admin_user定义为user.id == 1 私人
def admin_user?
current_user && current_user.id == 1
end
但我遇到了同样的错误信息。
答案 0 :(得分:0)
class ApplicationController < ActionController::Base
def admin_user?
unless current_user && current_user.admin?
redirect_to root_url
return false
end
end
end
class PostsController < ApplicationController
before_filter :signed_in_user
# before_filter :admin_user?, only: :destroy
before_filter :load_post, :only: :destroy
def destroy
@post.destroy
redirect_to root_url
end
private
def load_post
@post = current_user.admin? ? Post.find(params[:id]) : current_user.posts.find(params[:id])
end
end
UPD:
正如我从评论中所理解的那样,您希望用户能够销毁自己的帖子和管理员以便能够销毁任何帖子。在这种情况下,您不必检查before_filter中的用户admin,例如删除这一行:
before_filter :admin_user?, only: :destroy
答案 1 :(得分:0)
before_filter :admin_user, only: :destroy
class ApplicationController
def admin_user?
if current_user && current_user.id == 1
return true
else
redirect_to root_url, :error => "Admin only"
return false
end
end
end
自admin_user以来?从任何控制器调用,所以把它放在应用程序控制器