1.
alias_method
Makes new_name
a new copy of the
method old_name
. This can be used to retain access to methods that
are overridden.
module Mod
alias_method :orig_exit, :exit # Without alias_method, you have no way to access orig exit.
def exit(code=0)
puts "Exiting with code #{code}"
orig_exit(code)
end
end
include Mod
exit(99)
produces:
Exiting with code 99
2. alias_method_chain
How this method arise? Yes, I guess always we will need to do this whenever we want to enhance a method.
alias_method :perform_action_without_benchmark, :perform_action # retain access to old method
alias_method :perform_action, :perform_action_with_benchmark
The following do the same thing.
alias_method_chain :perform_action, :benchmark
Take a look at the source code:
# File active_support/core_ext/module/aliasing.rb, line 23
def alias_method_chain(target, feature)
# Strip out punctuation on predicates or bang methods since
# e.g. target?_without_feature is not a valid method name.
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
yield(aliased_target, punctuation) if block_given?
with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}"
alias_method without_method, target
alias_method target, with_method
case
when public_method_defined?(without_method)
public target
when protected_method_defined?(without_method)
protected target
when private_method_defined?(without_method)
private target
end
end
And it's a enhancement module for benchmarking.
module Benchmarking
def self.included(base)
base.extend(ClassMethods)
base.class_eval do
alias_method_chain :perform_action, :benchmark
alias_method_chain :render, :benchmark
end
end
..... # where we difine perform_action_with_benchmark and render_with_benchmark
Dynamic language is cool! It makes enhancing easily, what you just need to do is:
ActionController::Base.class_eval do
include ActionController::Flash
include ActionController::Benchmarking
include ActionController::Caching
...
And that's why DHH said, Rails 不是个庞然大物
。
分享到:
- 2009-04-15 20:59
- 浏览 961
- 评论(0)
- 论坛回复 / 浏览 (0 / 1736)
- 查看更多
相关推荐
允许您使用为Rails应用程序的前端供电。 是将前端工具像Ruby一样进行编程,纯属喜悦! :smiling_face_with_heart-eyes: 或在运行的检查。 产品特点 :high_voltage: :light_bulb: 即时服务器启动 :high_voltage: ...
Rails的服务器定时响应头 带来Ruby on Rails服务器端性能指标 :chart_increasing: 通过server_timing gem访问Chrome的开发者工具(以及其他支持浏览器)。 生产安全:trade_mark:。 指标是从 gem收集的。 不需要帐户...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
持续移动且不破坏事物 :factory: :building_construction: :construction: :construction_worker: 正在建设中-请稍后再回来!
:dog_face: MiAudota :cat_face: 该应用程序显示可从用户最近的庇护所获取的动物,并允许将其应用到收养过程中,从而完成一份调查表,庇护所将评估可能采用者的概况。 宠物预览这个怎么运作? :thinking_face: 用户...
默认引导程序3 rails_admin主题的现代替代。 它提供新闻颜色,调整和全新的树状视图菜单。 您可以将其派生并根据需要更改variables.scss ! 宝石文件 gem 'rails_admin_rollincode' , '~> 1.0' gem 'rails_admin'...
自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列、缓存服务器、搜索引擎等) ...
Rails Admin 全球化自定义操作。 这段代码未经测试,需要很好地重写,但可以工作。 将其视为原型。 用法: 将 gem 添加到您的打包器中: gem "rails_admin" gem "globalize3" gem "rails_admin_globalize" 将...
用简单的定义语法替换了固定装置,支持多种构建策略(保存的实例,未保存的实例,属性哈希和存根对象),并且支持同一类的多个工厂( user , admin_user等),包括工厂继承。 从factory_girl_rails过渡? 查看 。...
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) ...
graphql-rails-generators 一些生成器可以轻松将Rails模型与集成。 我之所以创建它,是因为我浪费了太多的按键来手动复制模型架构以创建graphql类型。 该项目包含用于查看ActiveRecord模型架构的生成器,并为您...
安装将此行添加到您的应用程序的Gemfile中: gem 'famous-rails'然后执行: $ bundle或将其自己安装为: $ gem install famous-rails用法假设我们有一个Famo.us应用程序,如下所示: - app / - content / - fonts / ...
rails_best_practices rails_best_practices是用于检查Rails代码质量的代码度量工具。 它支持以下ORM / ODM: 活动记录 蒙古型 mongomapper 以及以下模板引擎: erb 哈姆 减肥 拉布尔 rails_best_practices...
Rails :: SessionCookie 快速,松散耦合的请求有关经过Cookie验证的应用程序的规范。 为什么 可能,您可能已经看到了很多像这样的代码: # config/initializers/session_store.rb Rails . application . config . ...
建立 运行以下命令以启动并运行该应用程序。 $ docker-compose up 该应用程序的后端将在localhost:3020上运行。 该应用程序的前端将在localhost:4020上运行。
其他版本React版本Vue版本Golang版本快速链接屏幕截图用法Scree Rails-Mini-Social-Network一个由Rails创建的迷你社交网络! 不再维护。 另一个版本React版本Vue版本Golang版本快速链接屏幕截图用法屏幕截图用法首先...
RailsBooster 尝试将所有通用配置、gem 和最佳实践放在一个地方,这将消除对所有先决条件的需求,并立即启用实际业务逻辑的工作。 :hammer_and_wrench: 如何使用 跑步 rails new blog --skip-javascript --skip-...
Ruby on Rails教程:первоеприложение 。 您可能要讲的内容: * Rails版本4.2.1 * Ruby版本2.2.2-p95(i686-linux) * RubyGems版本2.4.5 *机架版本1.6.4 * JavaScript运行时Node.js(V8)...
Ruby on Rails的启动时间助推器,延迟加载整个血腥路由,因此应用程序可以快速启动:sign_of_the_horns:route_lazy_routes route_lazy_routes是一个邪恶的Rails插件,它延迟加载整个血腥路由,直到服务器获得第一个...
在Ruby开发领域,Rails框架是构建Web应用的首选工具,而部署Rails应用到生产环境是一项重要的任务。在Ubuntu Server上,我们通常会采用系统服务管理工具来自动化应用的启动、停止和监控,其中`init.d`是传统的选择之...