Encapsulates the common pattern of:
alias_method :foo_without_feature, :foo
alias_method :foo, :foo_with_feature
With this, you simply do:
alias_method_chain :foo, :feature
替我们定义了两个方法:foo_with_feature 和 foo_without_feature <保存原来的foo方法>
def foo_with_feature
在此添加想向foo方法里面写的代码
foo_without_feature 调用一下原来的方法
end
And both aliases are set up for you.
Query and bang methods (foo?, foo!) keep the same punctuation:
alias_method_chain :foo?, :feature
is equivalent to
alias_method :foo_without_feature?, :foo?
alias_method :foo?, :foo_with_feature?
so you can safely chain foo, foo?, and foo! with the same feature.
module ActiveRecord
# Active Record automatically timestamps create and update operations if the table has fields
# named created_at/created_on or updated_at/updated_on.
#
# Timestamping can be turned off by setting
# <tt>ActiveRecord::Base.record_timestamps = false</tt>
#
# Timestamps are in the local timezone by default but can use UTC by setting
# <tt>ActiveRecord::Base.default_timezone = :utc</tt>
module Timestamp
def self.included(base) #:nodoc:
base.alias_method_chain :create, :timestamps
base.alias_method_chain :update, :timestamps
值得注意的是 :create , :update 这两个方法均为实例方法,它和类方法 :create ,:update 重名,但最终类方法也要去掉实例的:create 和 :update方法。
这里并不是把实例方法用别名定义为类方法。 再说也不可能把实例方法定义为类方法
。
base.class_inheritable_accessor :record_timestamps, :instance_writer => false
base.record_timestamps = true
end
private
def create_with_timestamps #:nodoc:
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('created_at', t) if respond_to?(:created_at) && created_at.nil?
write_attribute('created_on', t) if respond_to?(:created_on) && created_on.nil?
write_attribute('updated_at', t) if respond_to?(:updated_at)
write_attribute('updated_on', t) if respond_to?(:updated_on)
end
create_without_timestamps
end
def update_with_timestamps #:nodoc:
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('updated_at', t) if respond_to?(:updated_at)
write_attribute('updated_on', t) if respond_to?(:updated_on)
end
update_without_timestamps
end
end
end
alias_method_chain 用于类方法
重新定义 ActiveRecord::Base.find方法,加上特定的查询
module FooBar
def self.included(base)
base.extend ClassMethods
base.class_eval do
class << self
alias_method_chain :find, :creator
end
end
end
module ClassMethods
def find_with_creator(*args)
if self.columns.include?('creator')
with_scope(:find => {:conditions=> [sql_str, value_hash] }) do
find_without_creator(*args)
end
end
else
find_without_creator(*args)
end
end
end
分享到:
相关推荐
通过阅读这本书的翻译版,开发者不仅能学习到RESTful设计模式,还能掌握Rails框架下实现这些模式的具体方法和技术。无论是初学者还是经验丰富的Rails开发者,都能从中受益匪浅,提升自己的Web开发技能。
Rails_3_Cheat_Sheets.pdf
使用创建内容的简单方法。 预习 示范 要求 依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails <5和TurboLink <5进行测试 将此行添加到您的应用程序的Gemfile中: ...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
### RestFul_Rails_Dev_v_0.1 关键知识点解析 #### 1. REST 概念与背景 REST(Representational State Transfer)是一种软件架构风格,最初由 Roy Fielding 在他的博士论文中提出。它主张使用 HTTP 协议的标准方法...
书中可能讲解如何使用辅助方法(Helper Methods)、局部变量、布局(Layouts)和部分视图(Partials)来创建用户友好的界面。 4. **控制器(Controllers)**:控制器处理业务逻辑,连接模型和视图。书中会涉及动作...
Agile Web Development with Rails 1-14节_ppt(老师发的修正版)
通过研究这个示例,开发者可以掌握ActionCable的基本用法,了解如何在Rails5中实现WebSocket通信,以及如何将实时更新集成到现有的Rails应用程序中。此外,这个示例还展示了如何处理游戏状态的同步,这对于开发多人...
$ rails generate rails_admin_image_manager:install 将上传文件路径添加到您的.gitignore文件中 /public/rails_admin_image_manager 运行迁移 $ rails db:migrate SCOPE=rails_admin_image_manager 安装图像管理...
自述文件版本和设置$ ruby -vruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]$ rails -vRails 5.2.3使用我创建的特殊模板来加快开发过程。 # ~/rtfb_template.rbgroup :development , :test do gem '...
3. **使用**:在模型、控制器或视图中,你可以调用提供的方法来过滤文本。例如,在用户提交评论时,可以这样处理: ```ruby comment.content = ProfanityFilter.filter(comment.content) ``` 4. **自定义字典**:`...
Rails 管理员成为用户 Rails Admin 插件成为主应用程序中的设计用户 概述 在对用户问题进行故障排除时,从用户的角度来看是非常有用的。 该插件向 Rails Admin 仪表板添加了一个自定义操作,以便以用户身份从您的...
在构建复杂的Rails应用时,性能优化是至关重要的。Rails,作为一个强大的Web开发框架,虽然提供了丰富的功能和便利性,但如果不进行适当的优化,可能会导致应用程序响应时间变慢,资源消耗过大,甚至影响用户体验。...
Git作为版本控制系统,对于团队协作开发项目尤为重要,学习它的使用方法能够帮助开发者更好地管理代码的版本。而在Rails开发中,合适的编辑器可以提高代码编写和管理的效率,Linux命令行则对于部署和维护开发环境...
Rails,全称Ruby on Rails,是一款基于Ruby语言的开源Web应用程序框架,以其“Don't Repeat Yourself”(DRY)和...在使用这些Gem时,记得阅读其文档,了解使用方法和注意事项,以便更好地融入到自己的项目中。
Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_...
安装要启用rails_admin_history_rollback ,请将以下内容添加到您的Gemfile确保将其添加到rails_admin之后: gem 'rails_admin'gem 'rails_admin_history_rollback' 不用说,此插件还需要paper_trail gem。...
写一个宝石描述安装将此行添加到应用程序的 Gemfile 中: gem 'rails_admin_json_editor'然后执行: $ bundle或者自己安装: $ gem install rails_admin_json_editor用法TODO:在这里写使用说明贡献分叉它( ...
用法 在您的Gemfile : gem 'rails_admin_flatly_theme' , github : 'konjoot/rails_admin_flatly_theme' 在config/application.rb ,就在Bundler.require之后: ENV [ 'RAILS_ADMIN_THEME' ] = 'flatly_theme'...
标题中的"plug_rails_cookie_session_store"是一个针对Rails框架的会话存储插件,它旨在在Elixir的Phoenix框架中实现与Rails相兼容的会话管理。这个插件的目的是让那些从Rails迁移到Elixir Phoenix的应用程序能够...