例如在一个项目中,多处用到了搜索数据库中多个column的功能:
class Post < ActiveRecord::Base
has_many :comments
def self.search(query, fields, options = {})
find :all, options.merge(:conditions => [[fields].flatten.map {|f| "LOWER(#{f}) LIKE :query"}.join (' OR '),
{:query => "%#{query.to_s.downcase}%"}])
end
end
你在多个model中需要重复用到这段代码和逻辑,就可以将其封装成一个plugin,其步骤如下:
a. ruby script/generate plugin active_record_search
这个命令将自动创建一个空白的plugin 需要的数个文件
b. 然后进入 vender/plugin/active_record_search/lib 目录下,修改active_record_search.rb:
module ActiveRecordSearch
def search(query, fields, options = {})
find :all, options.merge(:conditions => [[fields].flatten.map {|f| "LOWER(#{f}) LIKE :query"}.join (' OR '),
{:query => "%#{query}%"}])
end
end
c. 在vender/plugin/active_record_search/ 这个目录下有一个init.rb 文件中,加入如下的代码,使active_record_search成为ActiveRecord::Base的基本功能:
require 'active_record_search'
ActiveRecord::Base.extend ActiveRecordSearch
好了,全部完成了,任何一个项目只要在vender/plugin/ 目录下有了上面那些的文件,则model都会自动有了这个搜索功能。
class Post < ActiveRecord::Base
has_many :comments
def self.search(query, fields, options = {})
find :all, options.merge(:conditions => [[fields].flatten.map {|f| "LOWER(#{f}) LIKE :query"}.join (' OR '),
{:query => "%#{query.to_s.downcase}%"}])
end
end
你在多个model中需要重复用到这段代码和逻辑,就可以将其封装成一个plugin,其步骤如下:
a. ruby script/generate plugin active_record_search
这个命令将自动创建一个空白的plugin 需要的数个文件
b. 然后进入 vender/plugin/active_record_search/lib 目录下,修改active_record_search.rb:
module ActiveRecordSearch
def search(query, fields, options = {})
find :all, options.merge(:conditions => [[fields].flatten.map {|f| "LOWER(#{f}) LIKE :query"}.join (' OR '),
{:query => "%#{query}%"}])
end
end
c. 在vender/plugin/active_record_search/ 这个目录下有一个init.rb 文件中,加入如下的代码,使active_record_search成为ActiveRecord::Base的基本功能:
require 'active_record_search'
ActiveRecord::Base.extend ActiveRecordSearch
好了,全部完成了,任何一个项目只要在vender/plugin/ 目录下有了上面那些的文件,则model都会自动有了这个搜索功能。
发表评论
-
12.3.3 scaling issue of the status feed
2011-10-30 17:54 825the problem of the implementati ... -
12.3 the status feed
2011-10-30 15:34 8611. we need to get all the micro ... -
12.2 a working follow button with Ajax
2011-10-29 18:10 9141. in the last chapter, in the ... -
12.2 a web interface for following and followers.
2011-10-28 22:14 8801.before we do the UI, we need ... -
12. following user, 12.1 relationship model
2011-10-18 14:29 7551. we need to use a relationshi ... -
11.3 manipulating microposts.
2011-10-17 15:31 9011. since all micropost actions ... -
11.2 show microposts.
2011-10-17 12:01 7051. add test to test the new use ... -
11.1 user micropost -- a micropost model.
2011-10-17 10:43 11081. we will first generate a mic ... -
10.4 destroying users.
2011-10-16 15:47 747in this chapter, we will add de ... -
10.3 showing users list
2011-10-15 20:41 778in this chapter, we will do use ... -
10.2 protect pages.
2011-10-15 15:11 668again, we will start from TD ... -
10.1 updating users.
2011-10-14 18:30 7101. git checkout -b updating-use ... -
9.4 sign out
2011-10-13 15:21 738whew!!!, last chapter is a long ... -
9.3 sign in success.
2011-10-12 15:39 7521. we will first finish the cre ... -
9.1 about flash.now[:error] vs flash[:error]
2011-10-12 15:37 727There’s a subtle difference ... -
9.2 sign in failure
2011-10-12 12:19 660start from TDD!!! 1. requir ... -
9.1 sessions
2011-10-12 10:00 645a session is a semi-permanent c ... -
what test framework should you use?
2011-10-11 16:56 0for integration test, i have no ... -
what test framework should you use?
2011-10-11 16:56 0<p>for integration test, ... -
8.4 rspec integration tests
2011-10-11 16:53 723in integration test, you can te ...
相关推荐
1. **Plug-in定义**:在Eclipse RCP中,Plug-in是应用程序的基本构建块,它们提供了功能,如用户界面元素、服务或数据处理。每个Plug-in都有自己的生命周期,并通过声明依赖关系与其他Plug-in交互。 2. **Manifest....
### Fat Jar Eclipse Plug-In教程详解 #### 一、Fat Jar Eclipse Plug-In简介 **Fat Jar Eclipse Plug-In** 是一个非常实用的Eclipse插件,它能够帮助开发者将Java项目打包成一个包含所有依赖的可执行JAR文件,即...
AutoCAD 2020 CSharp plug-in.zip 文件是一个压缩包,其中包含了开发AutoCAD 2020插件所需的资源和源代码。这个插件是使用C#编程语言编写的,利用.NET Framework与AutoCAD进行交互。让我们深入探讨一下其中涉及到的...
### Flex Builder Plug-in and Adobe: An In-depth Exploration In the dynamic world of web development, especially in the realms of Flash and Flex, the integration between Eclipse and Flex Builder has ...
1. **插件(Plug-in)**:是RCP中的基本单元,每个插件都封装了一组功能。它们之间通过接口通信,可以独立开发和部署。 2. **扩展点(Extension Point)**:定义了插件可以插入的接口,是插件间交互的桥梁。 3. **...
1、利用QuartusII的"MegaWizard Plug-In Manager", 设计输入数据宽度是4bit的ADD、SUB、MULT、DIVIDE、COMPARE 把它们作为一个project,DEVICE选用EPF10K70RC240-4,对它们进行 时序仿真, 2、利用QuartusII的...
在本文中,我们将深入探讨“Writing an Eclipse Plug-in”这一主题,这是一系列教程,旨在指导开发者逐步创建属于自己的Eclipse插件。Eclipse插件是扩展Eclipse集成开发环境(IDE)功能的重要方式,允许用户自定义...
《RCP_Plug-in开发自学教程(1-5章)》是针对Eclipse RCP(Rich Client Platform)和Plug-in开发的学习指南,旨在帮助初学者掌握这一强大的客户端应用程序开发技术。RCP是一种基于Eclipse框架的开发平台,它允许开发者...
1. **插件项目创建**:在Eclipse IDE中,通过“File” -> “New” -> “Plug-in Project”来创建一个新的插件项目。设置项目的ID、名称和版本等基本信息。 2. **插件元数据**:`.plugin.xml`文件用于定义插件的元...
总结,本文介绍了Fat Jar的概念、使用Fat Jar Plug-in打包Java可执行程序的方法,以及在Linux环境中使用`nohup`命令启动Java后台服务的技巧。通过这些知识,你可以更方便地管理和部署Java应用程序。
【标题】"Complete VS2008-Setup-Project with Add-In for Feature-SelectionTree" 涉及的是一个完整的Visual Studio 2008安装项目,该项目包含了一个用于功能选择树的Add-In(插件)。这个解决方案为开发者提供了一...
- 在“Comm”设置中,选择“Plug-in Module”下的“FreeMASTER BDM Communication Plug-in (CortexM, PowerPC, HCS08/12, ColdFire)”选项。 - 点击“Configure…”按钮,并在弹出的窗口中选择“BDM cable ...
2. **Plug-in Developer Guide (PDG)**:Eclipse提供了PDG,它是一份详尽的指南,帮助开发者理解Eclipse插件开发的基本概念和步骤。PDG包括了创建、运行、调试和发布插件的所有信息。 3. **PDE工具**:PDE是Eclipse...
在项目模板中选择“VSIX Project”,这将为你创建一个基本的扩展结构。 5. 在项目中添加对PPAPI、NACL和PNACL库的引用。这可能涉及到修改项目文件(如.csproj)来包含外部库的路径。 6. 编写扩展代码,这包括自定义...
总之,“simple-quiz-system-project-in-python”是一个涵盖多个Python核心概念的实践项目,它将带你深入了解Python的实用性和灵活性。动手尝试并完善这个项目,你会发现自己的编程技能在不知不觉中得到了显著提升。
为了在Eclipse中实现SVN的功能,就需要安装SVN插件。SVN-EclipsePlug-1.2.2就是这样一个插件,它允许开发者在Eclipse中直接进行版本控制操作,包括代码的提交、更新、比较、解决冲突以及查看项目历史等。 在Eclipse...
在IT行业中,开发人员经常需要将特定功能封装到动态链接库(DLL)中,以便于在不同的项目中重用代码。本主题聚焦于如何在DelphiXE10.3环境中,将HTTP GET和POST请求封装到DLL,并在独立的EXE程序中调用这些功能。...
基于Microsoft Office的开发,Add-in Express提供了一组用于创建Microsoft Office插件的组件。与所有Microsoft Office程序交互的所有必需技术包:Microsoft Outlook,Excel,Word,Visio,Microsoft Project,...