简单讲,就是我要在我的model里增加一个全文检索的方法。
前世因请看我上一篇blog [url]http://yangzhihuan.iteye.com/blog/263432[/url]
今世果接着往下看
今晚实践了一把,证实此法可行!
代码有些地方要修正,把要hack的代码放在lib/open_active_record_base.rb中:
使用单例类来定义全文检索的方法full_text_search,并要注意
中的 self ,由于这个方法在单例类中定义的,所以在子类中调用这个方法的时候 self 就表示子类。
因而可以在子类中这样使用:
在rails中这样使用:
在environment.rb中加上一句:
这样的意思是在rails启动的时候加载这个文件,从而达到增强ActiveRecord的效果。
前世因请看我上一篇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的效果。