本文概述
- 过滤前
- 后过滤器
- 周围的过滤器
- 保护过滤器方法
Rails支持三种类型的过滤方法:
- 过滤前
- 后过滤器
- 周围过滤器
例:
class UserController <
ApplicationController before_filter :verify_passworddef verify_password... end end
在此示例中, 方法verify_password用作before过滤器。在调用任何操作方法之前, 将先调用verify_password方法。
后过滤器执行动作控制器中的代码后, 执行过滤器后的Rails。就像之前的过滤器一样, 之后的过滤器也定义在调用它们的控制器类的顶部。要设置它, 你需要调用after_filter方法。
例:
class PhotoController <
ApplicationController after_filter :resize_photo def resize_photo ... end end
在此示例中, 方法resize_photo被应用为after过滤器。
周围的过滤器过滤器周围的轨道包含在执行控制器代码之前和之后执行的代码。通常在需要过滤器之前和之后都需要使用它们。与其他两个过滤器相比, 其实现方式略有不同, 但更为复杂。它通常由一个通用类定义, 该类同时包含before和after方法。
例:
class ActionLogger def before(controller) @start_time = Time.new end def after(controller) @end_time = Time.now @elapsed_time = @end_time.to_f - @start_time.to_f @action = controller.action_name # next save this logging detail to a file or database table end end
在ActionLogger类中, 在方法捕获时间之前, 一个动作开始, 在方法捕获时间之后, 一个动作完成。
让我们看看ActionLogger类如何作为环绕过滤器。在你的控制器类中, 只需添加around_filter方法并将ActionLogger的实例作为参数传递。
class PhotoController <
ApplicationController around_filter ActionLogger.new end
保护过滤器方法控制器类中的任何方法都可以从浏览器进行路由。它是通过保护类中方法的能力来完成的。所有Ruby方法都具有以下保护级别之一。
- 公共:可从任何外部类或使用与定义它们相同类的方法访问这些方法。
- 受保护的:这些方法只能在定义它们的类中以及从定义它们的类继承的类中访问。
- 私有:这些方法只能在定义它们的类中访问。
注意:受保护的方法和私有方法无法从浏览器路由。范例:
class Userdef new_user ... end protected def sign_in ... end private def user_identity ... end def assign_sidekick ... end end
【Rails多种过滤器用法实例】在上面的示例中, 有一个受保护的方法和两个私有的方法。在User类中, 将user_identity方法设为私有方法。只有User类中的其他方法可以调用它。 sign_in方法只能由User类或从User类继承的类中的方法调用。
推荐阅读
- Ruby on Rails CRUD操作图解
- Rails文件上传实例详细图解
- Rails 3种缓存用法和实例
- Ruby on Rails 5 Hello World示例
- Rails脚本工具使用介绍
- Ruby on Rails RVM版本管理用法
- Ruby on Rails MVC开发基本概念
- Rails IDE或编辑器介绍
- Ruby Active Record解释和用法例子