`

插件扩展

阅读更多

在ruby on rails3 的guides,插件扩展中有这样一段代码

http://guides.rubyonrails.org/plugins.html#add-an-instance-method

 

module Yaffle
  def self.included(base)
    base.send :extend, ClassMethods
  end
 
  module ClassMethods
    def acts_as_yaffle(options = {})
      cattr_accessor :yaffle_text_field
      self.yaffle_text_field = (options[:yaffle_text_field] || :last_squawk).to_s
      send :include, InstanceMethods
    end
  end
 
  module InstanceMethods
    def squawk(string)
      write_attribute(self.class.yaffle_text_field, string.to_squawk)
    end
  end
end
 
ActiveRecord::Base.send :include, Yaffle

 

还可以有几种写法:

 

A:

module Yaffle
  def self.included(base)
    base.send :extend, ClassMethods  
    base.send :include, InstanceMethods
  end
 
  module ClassMethods
    def acts_as_yaffle(options = {})
      cattr_accessor :yaffle_text_field
      self.yaffle_text_field = (options[:yaffle_text_field] || :last_squawk).to_s
    end
  end
  
  module InstanceMethods
    def squawk(string)
      write_attribute(self.class.yaffle_text_field, string.to_squawk)
    end
  end
end

ActiveRecord::Base.send :include, Yaffle

 

B:

module Yaffle
  def self.included(base)
    base.send :extend, ClassMethods  

    base.class_eval do
      include InstanceMethods
    end
 end
 
  module ClassMethods
    def acts_as_yaffle(options = {})
      cattr_accessor :yaffle_text_field
      self.yaffle_text_field = (options[:yaffle_text_field] || :last_squawk).to_s
    end
  end
  
  module InstanceMethods
    def squawk(string)
      write_attribute(self.class.yaffle_text_field, string.to_squawk)
    end
  end
end

ActiveRecord::Base.send :include, Yaffle

 

C:

module Yaffle
  def self.included(base)
    base.send :extend, ClassMethods      
  end
 
  module ClassMethods
    def self.extended(base)
      base.send :include, InstanceMethods
    end
    def acts_as_yaffle(options = {})
      cattr_accessor :yaffle_text_field
      self.yaffle_text_field = (options[:yaffle_text_field] || :last_squawk).to_s
    end
  end
  
  module InstanceMethods
    def squawk(string)
      write_attribute(self.class.yaffle_text_field, string.to_squawk)
    end
  end
end

ActiveRecord::Base.send :include, Yaffle

 

 

[1]http://vincent253.iteye.com/blog/135213

分享到:
评论

相关推荐

    ECharts--基于力导向布局图功能更完善的人物关系图插件扩展-增加横纵滚动条

    在给定的标题“ECharts--基于力导向布局图功能更完善的人物关系图插件扩展-增加横纵滚动条”中,我们可以深入探讨几个关键知识点: 1. **力导向布局(Force Layout)**: 力导向布局是一种常见的网络图绘制方法,...

    openwrt插件扩展大全ipk3100个对应功能中文 解释

    openwrt插件扩展大全ipk3100个对应功能中文 解释

    基于 web 端的 Markdown 编辑器,支持协同编辑扩展和方便的插件扩展

    markdown下载基于 web 端的 Markdown 编辑器,支持协同编辑扩展和方便的插件扩展基于 web 端的 Markdown 编辑器,支持协同编辑扩展和方便的插件扩展基于 web 端的 Markdown 编辑器,支持协同编辑扩展和方便的插件...

    jquery easyui pagination 分页插件扩展

    在本案例中,我们关注的是"jquery easyui pagination 分页插件扩展",这是一个用于增强默认分页功能的自定义插件。 分页在数据展示中扮演着重要的角色,特别是在处理大量数据时,它能让用户按需加载和浏览数据,...

    Eclipse常用插件扩展点

    本篇文章将深入探讨Eclipse插件开发中的关键知识点,包括插件扩展点、RCP(Rich Client Platform)应用开发以及如何在Eclipse RCP中整合第三方库。 首先,让我们了解Eclipse插件扩展点。扩展点是Eclipse平台提供的...

    Eclipse从入门到精通 常用插件扩展点

    【Eclipse从入门到精通:常用插件扩展点】 在Eclipse开发中,插件是扩展其功能的核心组件。插件通过与Eclipse内核交互,实现各种定制化的功能。而这一交互的关键在于插件的扩展点(Extension Points)。本章节主要...

    动态插件扩展范例

    在IT行业中,动态插件扩展是一种常见的软件设计模式,它允许程序在运行时加载和卸载额外的功能模块,即插件。这样的设计提高了软件的可维护性和灵活性,使得开发者能够根据需要添加或更新功能,而无需修改核心代码。...

    openwrt 通用 扩展插件ipk大全全中文解释下载

    它提供了高度可定制的网络功能,允许用户通过安装各种插件扩展其功能。本资源是针对OpenWRT的一个通用扩展插件IPK大全,包含全中文解释,方便中国用户理解和使用。 IPK(IPackage)是OpenWRT软件包管理系统所采用的...

    Dreamweaver的js语法格式化插件扩展(只支持CS4以上的版本)

    为了帮助开发者更高效地处理JS代码,Dreamweaver提供了一系列的插件扩展,其中包括专门针对JS语法格式化的工具。 这个“Dreamweaver的js语法格式化插件扩展”专为Dreamweaver CS4及更高版本设计,目的是自动对JS...

    (源码)基于Monorepo结构的JavaScript插件扩展库.zip

    # 基于Monorepo结构的JavaScript插件扩展库 ## 项目简介 这是一个基于Monorepo结构的插件扩展库项目,名为"roshinextends"。该项目旨在通过扩展原生JavaScript的功能,帮助开发者在项目开发过程中更加高效省时。...

    Kubernetes插件扩展技术介绍.pdf

    **Kubernetes插件扩展技术详解** Kubernetes是一个强大的容器编排系统,其设计的核心就是可扩展性。通过各种插件和扩展机制,用户能够自定义和增强Kubernetes集群的功能,以满足特定的需求。本文主要围绕Kubernetes...

    cacti插件扩展(monitor和thold)图解

    Cacti 插件扩展(Monitor 和 Thold)图解 本文档主要介绍了 Cacti 的插件扩展,包括 Monitor 和 Thold 的安装和配置。Cacti 是一个功能强大的网络监控工具,通过插件的方式可以扩展其功能。下面将详细介绍 Monitor ...

    9月最新开心彩虹易码支付最新版转账付款功能,支持通过插件扩展

    9月最新开心彩虹易码支付最新版转账付款功能,支持通过插件扩展 1. 新增微信公众号消息提醒功能 2. 重构转账付款功能,支持通过插件扩展 3. 商户后台新增代付功能 4. 后台新增付款记录列表 5. 支付宝插件新增预授权...

    MozBackup(火狐浏览器插件扩展书签备份恢复)

    MozBackup 是一个备份和还原 Mozilla, Mozilla Firefox, Mozilla Thunderbird 和 Netscape 等软件的用户配置文件的工具。可以帮助您备份邮件、书签以及其它相关数据。并且它是完全免费的。

    易语言源码易语言插件扩展演示源码.rar

    易语言源码易语言插件扩展演示源码.rar 易语言源码易语言插件扩展演示源码.rar 易语言源码易语言插件扩展演示源码.rar 易语言源码易语言插件扩展演示源码.rar 易语言源码易语言插件扩展演示源码.rar 易语言源码...

    alipay for chrome chrome浏览器支付宝插件 扩展

    alipay for chrome chrome浏览器 支付宝插件 扩展 使得chrome浏览器支持支付宝

    dreamweaver 插件扩展包

    这款"DW扩展包"是一个集合了多种插件和扩展的工具包,旨在提高用户的工作效率和创造力。以下将详细介绍Dreamweaver插件及其扩展包中的关键知识点。 1. **插件的定义与作用**: Dreamweaver插件是第三方开发者为...

    userstamp, 这个 Rails 插件扩展ActiveRecord.zip

    userstamp, 这个 Rails 插件扩展ActiveRecord Userstamp插件( v-2.0 )概述Userstamp插件扩展了 ActiveRecord::Base,以添加对'创建者','更新程序'和'deleter'属性的自动更新。 它是基于 ActiveRecord::Timesta

    异次元发卡网源码强悍的插件扩展API对接、强制登录购买等.txt

    异次元发卡网源码强悍的插件扩展API对接、强制登录购买等

    eclipse扩展点介绍 插件

    在本文中,我们将深入探讨Eclipse的扩展点及其对开发者的重要性,同时也会提及如何通过插件来利用这些扩展点。 **一、Eclipse扩展点的概念** Eclipse的扩展点是它插件系统的核心组成部分,它定义了插件可以插入或...

Global site tag (gtag.js) - Google Analytics