如何处置增强ActiveRecord::Base的rb文件

现在做一个全文检索的功能,需要在model加上这么一段代码:

def self.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 = this.find_by_contents(q, options)
end


我有多个model需要加上全文检索的功能,现在的做法是在每个model都cp这段代码过去,cp的坏处也就不多说了。

因为每个model都是自ActiveRecord::Base继承而来,而且ruby有强大的open class功能,应该是可以这样的:
新建一个open_ar.rb文件

module ActiveRecord
class Base
def self.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 = this.find_by_contents(q, options)
end
end
end

这样当可以一劳永逸。
那么在rails的目录结构中,我新建的这个open_ar.rb文件,应该放在那个目录下呢?
我是想遵循rails默认的目录结构来放置这个文件。
我想应该有不少DX会hack一下rails代码的吧,不过没找到过相关的资料。那位兄弟知道的话,请留言告之,感激不尽...

我觉得可行的做法是放到lib下:
RAILS_ROOT/lib/open_ar.rb
然后在 RAILS_ROOT/config/initializers/new_rails_defaults.rb中

require "lib/open_ar"

这样配置rails启动即加载此文件,达到增强AR,减少重复代码的效果。

此法纯粹是YY,未经实践,切忽模仿。
明晚实践一下这个做法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值