主页

Ruby中的include,extend与prepend

include, extend, prepend 参考地址:ruby include extend prepend 使用方法 module A def a_method puts 'a method' end def self.aa_method puts 'aa method' end end module B extend A end module C include A end class AA extend A end class BB include A end class CC prepend A def a_m...

阅读更多

Ruby中的钩子方法

钩子方法提供了一种方式用于在程序运行时扩展程序的行为 参考地址:Ruby 中一些重要的钩子方法 included included方法是基于include的方法,可以在一些module或者class中include了一个module时它会被调用。实际在执行included之前,模块中的append_features被调用并执行具体的include操作,注意使用时不要随意覆盖Ruby的append_features方法 module M def self.included(base) puts "#{base} included #{self}" end def a_method puts "a_method in M"...

阅读更多

Rails中的ActiveSupport::Concern

普通的mixin module M # self.included是include时的钩子方法 def self.included(base) # base扩展 base.extend ClassMethods # 打开base,在base中执行代码 base.class_eval do # 这里写一个类include时在类需要执行什么动作 end end module ClassMethods # 这里写一个类include该module后生成的类方法 end # 这里写一个类include该module后生成的实例类方法 end 使用 ActiveSupport::Concern r...

阅读更多

Rails对HTTP条件GET请求的支持

原文地址 对条件 GET 请求的支持 条件 GET 请求是 HTTP 规范的一个特性,以此告诉 Web 浏览器,GET 请求的响应自上次请求之后没有变化,可以放心从浏览器的缓存中读取。 为此,要传递HTTP_IF_NONE_MATCH和 HTTP_IF_MODIFIED_SINCE首部,其值分别为唯一的内容标识符和上一次改动时的时间戳。浏览器发送的请求,如果内容标识符(etag)或上一次修改的时间戳与服务器中的版本匹配,那么服务器只需返回一个空响应,把状态设为未修改。 服务器(也就是我们自己)要负责查看最后修改时间戳和HTTP_IF_NONE_MATCH首部,判断要不要返回完整的响应。既然 Rails 支持条件 GET 请求,那么这个任务就非常简单: class Produ...

阅读更多

Rails缓存存储器

Rails 为存储缓存数据(SQL 缓存和页面缓存除外)提供了不同的存储器。 原文地址 配置 config.cache_store 配置选项用于设定应用的默认缓存存储器。可以设定其他参数,传给缓存存储器的构造方法 config.cache_store = :memory_store, { size: 64.megabytes } 此外,还可以在配置块外部调用 ActionController::Base.cache_store。 缓存存储器通过 Rails.cache 访问。 ActiveSupport::Cache::Store 这个类是在 Rails 中与缓存交互的基础。这是个抽象类,不能直接使用。你必须根据存储器引擎具体实现这个类。Rails 提供了...

阅读更多

Rails片段缓存以及其他缓存

更多详细查看原文地址 片段缓存 动态 Web 应用一般使用不同的组件构建页面,不是所有组件都能使用同一种缓存机制。如果页面的不同部分需要使用不同的缓存机制,在不同的条件下失效,可以使用片段缓存(ActionView::Helpers::CacheHelper#cache)。片段缓存把视图逻辑的一部分放在 cache 块中,下次请求使用缓存存储器中的副本伺服 使用 如果想缓存页面中的各个商品,可以使用下述代码: <% @products.each do |product| %> <% cache product do %> <%= render product %> <% end %> <% end %>...

阅读更多