设计 before_action 解释

Devise before_action explanation

我无法理解安装 Devise 时在控制器中自动生成的这一行:

before_action :set_post, only: [:show, :edit, :update, :destroy]

我尝试阅读文档,但无法理解它的作用。例如,:set_post 符号有什么作用?它是什么的一部分?

任何我可以进一步阅读的解释或资源都将不胜感激。

:set_post - 控制器末尾的方法。

设备与

无关

假设您有这样的控制器:

class PostController < ApplicationController
   def index
      @posts = Post.all
   end
   def show
      @post = Post.find(params[:id])
   end
   def edit
      @post = Post.find(params[:id])
   end
end

你看到在 showedit 动作中有相同的代码,你违反了 DRY 原则,所以为了避免代码重复,你设置了一个动作(方法):

def set_post
  @post = Post.find(params[:id])
end

将在需要相同代码的操作之前执行:

before_action :set_post, only: [:show, :edit, :update, :destroy]

最终你会得到这样的控制器:

class PostController < ApplicationController
   def index
      @posts = Post.all
   end
   def show
   end
   def edit          
   end

   private
      def set_post
         @post = Post.find(params[:id])
      end
end