Rails 过滤器

2024年12月18日 | 3 分钟阅读

Rails 过滤器是在执行控制器的方法之前或之后运行的方法。 当您希望确保给定的代码块与任何被调用的动作方法一起运行时,它们很有用。

Rails 支持三种类型的过滤器方法

  • Before 过滤器
  • After 过滤器
  • Around 过滤器

Before 过滤器

Rails before 过滤器在执行动作控制器中的代码之前执行。 before 过滤器在调用它们的控制器类的顶部定义。 要设置它,您需要调用 before_filter 方法。

示例

在此示例中,方法 verify_password 用作 before 过滤器。 在调用任何动作方法之前,将调用 verify_password 方法。


After 过滤器

Rails after 过滤器在执行动作控制器中的代码之后执行。 就像 before 过滤器一样,after 过滤器也定义在调用它们的控制器类的顶部。 要设置它,您需要调用 after_filter 方法。

示例

在此示例中,方法 resize_photo 被用作 after 过滤器。


Around 过滤器

Rails around 过滤器包含在执行控制器代码之前和之后都执行的代码。 它们通常用于需要 before 和 after 过滤器时。 它的实现与其他两个过滤器略有不同,也更复杂。 它通常由一个包含 before 和 after 方法的公共类定义。

示例

在 ActionLogger 类中,before 方法捕获动作开始的时间,after 方法捕获动作完成的时间以及经过的时间。

让我们看看 ActionLogger 类如何用作 around 过滤器。 在您的控制器类中,只需添加 around_filter 方法并传递 ActionLogger 的实例作为参数即可。


保护过滤器方法

您控制器类中的任何方法都可以从浏览器路由。 这是通过其保护类中方法的手段完成的。 所有 Ruby 方法都具有这些保护级别之一。

  • Public: 这些方法可以从使用定义它们的同一类的任何外部类或方法访问。
  • Protected: 这些方法只能在定义它们的类中以及从定义它们的类继承的类中访问。
  • Private: 这些方法只能在定义它们的类中访问。

默认情况下,方法始终是公开的。 意味着任何外部类或方法都可以访问它们。 要定义保护级别,您可以通过在要保护的方法前面加上 protected 或 private 关键字来声明方法。

注意:受保护和私有方法不能从浏览器路由。

示例

在上面的示例中,有一个受保护的方法和两个私有方法。 在 User 类中,user_identity 方法被设为私有方法。 只有 User 类中的其他方法才能调用它。 sign_in 方法只能由 User 类中或从 User 类继承的类中的方法调用。