过滤器/回调是否应该受到关注

问题描述

假设我对控制器有一个顾虑,它的名字是身份验证。它包含一个before_action 方法authenticate_user。我应该在哪里写 before_action :authenticate_user? 最佳做法是什么?它应该写在关注中还是包含在这个关注中的控制器中?

注意:我想实现单一职责

解决方法

这取决于您的控制器结构。身份验证逻辑最常放置在大多数其他控制器最终继承的更高级别的控制器中,而不是一个关注点。这是因为您可以简单地在更高级别启用身份验证并使其在所有子控制器上处于活动状态,而无需为每个子控制器显式添加关注点,这可能更容易出错。该更高级别的控制器将包含 before_actionauthenticate_user 方法。如果出于任何原因,沿途有一个控制器需要禁用身份验证,假设这是一个例外,您可以使用 skip_before_action

class UserController < ApplicationController
    before_action :authenticate

    private

    def authenticate
        # ...
    end
end

class SomeController < UserController
    # auth already enabled here
end

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...