简单讲,就是我要在我的model里增加一个全文检索的方法。
前世因请看我上一篇blog
http://yangzhihuan.iteye.com/blog/263432
今世果接着往下看
今晚实践了一把,证实此法可行!
代码有些地方要修正,把要hack的代码放在lib/open_active_record_base.rb中:
module ActiveRecord
class Base
class << self
#全文检索方法
def full_text_search(q, options = {})
return nil if q.nil? or q==""
default_options = {:limit => 10, :page => 1}
options = default_options.merge options
# get the offset based on what page we're on
options[:offset] = options[:limit] * (options.delete(:page).to_i-1)
results = self.find_by_contents(q, options)
end
end
end
end
使用单例类来定义全文检索的方法full_text_search,并要注意
results = self.find_by_contents(q, options)
中的 self ,由于这个方法在单例类中定义的,所以在子类中调用这个方法的时候 self 就表示子类。
因而可以在子类中这样使用:
Page.find_by_contents(q, options)
在rails中这样使用:
在environment.rb中加上一句:
require File.join(File.dirname(__FILE__),'..', 'lib','open_active_record_base')
这样的意思是在rails启动的时候加载这个文件,从而达到增强ActiveRecord的效果。
分享到:
相关推荐
Sortiri是一种干净轻巧的解决方案,用于使ActiveRecord :: Base对象可排序。 描述Sortiri是一种干净轻巧的解决方案,用于使ActiveRecord :: Base对象可排序。 入门Ruby 2.6.0和更高版本上的ActiveRecord 4.2+支持...
在创建一个ActiveRecord模型时,通常会定义一个继承自`ActiveRecord::Base`的类。例如,如果我们有一个`users`表,我们可以创建一个`User`类: ```ruby class User < ActiveRecord::Base end ``` 这个简单的定义就...
示例简单的方法...class Post < ActiveRecord::Base include Timeline::Track track :new_postend默认情况下,跟踪在after_create模型的回调中触发,并用作self对象和creator参与者。您可以明确指定这些选项...class...
主动记录一种轻松使用ActiveRecord的简便方法。 可与Grape,Sinatra,普通的旧机架甚至是无聊的小脚本一起使用!。 默认值都是非常Railsy的( config/database.yml , db/seeds.rb , db/migrate等),但是您可以...
ActiveRecord :: Jwt 此ActiveRecord扩展添加了jwt(JSON Web Token)方法 安装 将此行添加到您的应用程序的Gemfile中: ... ActiveRecord :: Base include ActiveRecord :: Jwt :: Encoder end us
stateful_enum是建立在ActiveRecord的内置ActiveRecord :: Enum之上的状态机gem。 安装 将此行添加到您的Rails应用程序的Gemfile中: gem 'stateful_enum' 和捆绑。 动机 您不需要抽象 stateful_enum取决于...
userstamp, 这个 Rails 插件扩展ActiveRecord Userstamp插件( v-2.0 )概述Userstamp插件扩展了 ActiveRecord::Base,以添加对'创建者','更新程序'和'deleter'属性的自动更新。 它是基于 ActiveRecord::Timesta
RailsAsyncMigrations ActiveRecord::Migration扩展程序以一种简单直接的方式使您的迁移异步。动机创建该库的目的是为了帮助在技术水平上难以扩展的小型公司。 小型项目不需要异步迁移队列,大公司在遇到扩展问题时...
确保两个模型都继承自ActiveRecord :: Base class Firm < ActiveRecord :: Base #... end class Client < ActiveRecord :: Base #... end 添加您的has_many和belongs_to class Firm < ...
提供一种将一个模型的定义为关联模型的方法。 例子 首先,两个简单的Article和Comment模型: class Article < ActiveRecord :: Base has_many :comments end class Comment < ActiveRecord :: Base belongs...
使用为资源创建别名的机制扩展ActiveRecord::Base 。 这是 ALPHA 软件,应小心使用。 安装 gem 'acts_as_aliased' 更新包后,运行 rails generate acts_as_aliased:install rake db:migrate 这将创建一个新表...
ActiveRecord :: TypedStore ... ActiveRecord :: Base typed_store :settings do | s | s . boolean :public , default : false , null : false s . string :email s . datetime :publish_at s . i
class User < ActiveRecord::Base establish_connection :shard_0 # 或者使用范围分片 # scope :on_shard_0, -> { with_shard(0) } # scope :on_shard_1, -> { with_shard(1) } end ``` 最后,通过作用域或链式...
最好将ActiveRecord::Collection描述为介于模型(从ActiveRecord::Base扩展而来)、 ActiveRecord::Relation和可枚举的记录集之间的某处。 集合包装并委托给上述对象,在需要时(并且尽可能不频繁地)在发送方法调用...
在以下查看有关loofah更多信息: : 特征丝瓜络activerecord包含两个ActiveRecord扩展: 丝瓜络:: ActiveRecordExtension是一个可选的清洁剂。 您必须明确声明要清除的属性。 丝瓜络::: 是替代,是一种选择退出的...
RGeo :: ActiveRecord是一个可选的模块,它为ActiveRecord提供空间扩展,以及一组用于基于RGeo编写空间ActiveRecord适配器的帮助程序。 概括 RGeo是使用Ruby编程语言编写位置感知应用程序的关键组件。 其核心是行业...
数据库表或视图被包装到一个类中,因此对象实例被绑定到表中的一行。 创建对象后,保存后会将新行添加到表中。 任何加载的对象都从数据库中获取其信息; 更新对象时,表中的相应行也会更新。 包装器类为表或视图中...
Gemfile 中: gem 'activerecord-relations_annotations' , '~> 0.0.1' 然后执行: $ bundle或者自己安装: $ gem install activerecord-relations_annotations用法不是最好的例子,但给你一个粗略的想法: class ...
这个 gem 允许使用 Hstore 在 ActiveRecord::Base 模型中嵌入辅助对象。 这将 Mongo 的嵌入式文档的优点带到了 PostgreSQL。 它以 Mongoid 的嵌入文档为模型。 一个例子胜过千言万语: class Person < ...
ActiveRecord :: Commentator ActiveRecord :: Commentator将caller_location (文件名,行号和方法名)添加为调用SQL语句SQL注释。 安装 将此行添加到您的应用程序的Gemfile中: gem 'activerecord-commentator'...