可將Controller中重复的代码抽出來,有三种方法可以定义在进入Action之前、之中或之后執行特定方法,分別是before_filter
、after_filter
和around_filter
,其中before_filter
最為常用。这三个方法可以接受Code block、一个Symbol方法名称或是一个类。
before_filter
before_filter最常用用于跨Action共用的方法,或是使用者权限验证等等:
class EventsControler < ApplicationController
before_filter :find_event, :only => :show
def show
end
protected
def find_event
@event = Event.find(params[:id])
end
end
每一个都可以搭配:only
或:except
参数。
around_filter
# app/controllers/benchmark_filter.rb
class BenchmarkFilter
def self.filter(controller)
timer = Time.now
Rails.logger.debug "---#{controller.controller_name} #{controller.action_name}"
yield # 这里让出來执行Action动作
elapsed_time = Time.now - timer
Rails.logger.debug "---#{controller.controller_name} #{controller.action_name} finished in %0.3s" % elapsed_time
end
end
# app/controller/events_controller.rb
class EventsControler < ApplicationController
around_filter BenchmarkFilter
end
Filter的順序
當有多個Filter時,Rails是由上往下依序執行的。如果需要加到第一個執行,可以使用prepend_before_filter
方法,同理也有prepend_after_filter
和prepend_around_filter
。
如果需要取消從父類別繼承過來的Filter,可以使用skip_before_filter :filter_method_name
方法,同理也有skip_after_filter
和skip_around_filter
。
分享到:
相关推荐
Ruby on Rails is the revolutionary online programming tool that makes creating functional e-commerce web sites faster and easier than ever. With the intuitive, straightforward nature of Ruby and the ...
Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加简洁高效。本教程将引导初学者进入Rails的世界,通过实例来深入理解其...
The title "Flex on Rails" suggests an in-depth exploration of integrating Adobe Flex with Ruby on Rails (RoR), focusing specifically on Flex 3 and Rails 2. This integration allows for the creation of ...
Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它基于MVC(模型-视图-控制器)架构模式,用于快速开发动态网站。Rails以其“约定优于配置”(Convention Over ...
《Rails Recipes with Source Code》是一本专注于Ruby on Rails框架实践技巧和源代码解析的书籍。Rails是基于Ruby语言的Web开发框架,以其“约定优于配置”(Convention over Configuration)的理念和“开发人员的...
<br> <br>Strings and numbers <br>Arrays and hashes <br>Classes, modules, and namespaces <br>Reflection and metaprogramming <br>XML and HTML processing<br><br>Ruby on Rails ...
- **Comparison with Other Frameworks:** To provide context and broaden the reader's perspective, the book compares ASP.NET MVC with other popular frameworks like MonoRail and Ruby on Rails....
ApplicationController include Sift filter_on :title , type : :string def index render json : filtrate ( Post . all ) endend 这将允许用户通过?filters[title]=foo并获得Post标题为小号foo 。 Sift还将使用...
这个项目是用引导的。...Ruby on Rails 在开发中代理 API 请求 配置代理后出现“无效的主机头”错误 手动配置代理 配置 WebSocket 代理 在开发中使用 HTTPS 在服务器上生成动态<meta>标签 预渲染成静态
Jinja2是基于ERB(Ruby on Rails中的模板引擎)和Mako模板语言的设计理念创建的,它具有高度的灵活性和可扩展性,同时提供了模板继承、宏、过滤器、表达式等丰富的特性。 **模板引擎的作用** 在Web开发中,模板...
- **Grails and Trails**:与Groovy和Ruby on Rails框架集成; - **Mule**:与企业集成平台Mule ESB集成; - **DWR**:与Direct Web Remoting集成; - **Appfuse**:与快速开发框架集成; - **AndroMDA**:与元数据...
Grails 借鉴了Ruby on Rails的设计理念,引入了GORM(Grails Object Relational Mapping)用于数据库操作,以及一系列的插件系统,支持快速构建复杂的Web应用程序。 2. **Groovy语言基础** Grails 采用Groovy作为...
Liquid 是一种开源的、设计简洁的模板语言,由 Shopify 创建并广泛用于电子商务平台,尤其是与 Ruby on Rails 集成的项目。它被用来动态渲染网页内容,允许开发者和设计师在不触及后端代码的情况下,轻松地创建和...
已过滤-将过滤器添加到ActiveRecord查询 gem帮助以老式的方式为Rails的ActiveRecord创建过滤器。 它使您的控制器更简单,形式轻松。 安装 将此行添加到您的应用程序的Gemfile中... create app/filters/application_fil
Spark Java提供了一组简单的API,使得开发者可以使用Java编写简洁、直观的路由代码,类似于Ruby on Rails。安装Spark Java通常通过Maven或Gradle添加依赖,例如在pom.xml中引入: ```xml <groupId>...