设计before_action解释

时间:2015-01-31 08:06:36

标签: ruby-on-rails ruby ruby-on-rails-4 devise

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

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

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

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

2 个答案:

答案 0 :(得分:1)

假设您有一个这样的控制器:

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

答案 1 :(得分:0)

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

该设备与

没有任何关系