hack了一把ActiveRecord::Base

简单讲,就是我要在我的model里增加一个全文检索的方法。

前世因请看我上一篇blog [url]http://yangzhihuan.iteye.com/blog/263432[/url]

今世果接着往下看
今晚实践了一把,证实此法可行!
代码有些地方要修正,把要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的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值