如何允许 :correct_user 和 :admin_user 删除 before_action 的 post?

How to allow both :correct_user and :admin_user delete a post by before_action?

更新后是答案,但 rails 告诉我

nil:NilClass

的未定义方法“销毁”

我认为correct_user方法和admin_user方法都需要重写,Harts在这里使用的逻辑很奇怪

class MicropostsController < ApplicationController
  before_action :logged_in_user, only: [:create, :destroy]
  before_action :correct_user_or_admin_user, only: :destroy

  def destroy
    @micropost.destroy
    flash[:success] = "Micropost deleted"
    redirect_to request.referrer || root_url
  end

  private

    def correct_user
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to root_url if @micropost.nil?
    end

    def admin_user
      #i dont know how to write it
    end

    def correct_user_or_admin_user
      correct_user || admin_user
    end

结束

这是不可能的,因为 :corrent_user:admin_user 只是 before_action 方法的符号参数。

您可以做的是:

before_action :load_micropost,  only: :destroy
before_action :admin_or_author, only: :destroy

在您的控制器中使用以下方法:

private
def load_micropost
  # renders 404 on production if not found
  @micropost = Micropost.find(params[:id])
end

def admin_or_author
  redirect_to(root_url) unless administrator? || authorship?
end

def administrator?
  current_user.admin?
end

def authorship?
  @micropost.user == current_user
end