现在做一个全文检索的功能,需要在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,未经实践,切忽模仿。
明晚实践一下这个做法。
分享到:
- 2008-11-06 00:21
- 浏览 1363
- 评论(6)
- 论坛回复 / 浏览 (6 / 2185)
- 查看更多
相关推荐
波塞冬 Poseidon 是一个非常简单的示例机架应用程序,可帮助您了解如何使用基于中间件的 MVC 模式和活动记录构建自己的... ActiveRecord::Base end 创建控制器: 控制器/post_controller.rb class PostController
ActiveRecord :: Base attr_accessible :name , :career end 如果您需要设置整个sinatra应用程序的帮助,请参见以下完整示例: : 创建一个生成应用程序的机架文件: # config.ru require 'bundler' Bundler . ...
用 Redis 来支持 ActiveRecord 或 DataMapper 的等 Ruby ORM 对象排序,免去在文件数据库中使用排序字段。 Installation Add this line to your application's Gemfile: gem 'model_sorter' Name your column, add ...
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails 目标 学完本课后,您应该能够... ... ActiveRecord :: Base belongs_to :category end # app/models/category.rb class Category < ActiveRecord :: Base has_many :posts end 种子数据
显示关联Rails目标学完本课后,您应该能够... 创建has_many和belongs_to关联。 通过控制台和db/seeds.rb构建关联的数据。 使用关联提供的方法查询关联数据。... ActiveRecord :: Base has_many :postsend种子数据
显示关联Rails目标学完本课后,您应该能够... 创建has_many和belongs_to关联。 通过控制台和db/seeds.rb构建关联的数据。 使用关联提供的方法查询关联数据。... ActiveRecord :: Base has_many :postsend种子数据
显示关联Rails目标学完本课后,您应该能够... 创建has_many和belongs_to关联。 通过控制台和db/seeds.rb构建关联的数据。 使用关联提供的方法查询关联数据。... ActiveRecord :: Base has_many :postsend种子数据
显示关联Rails目标学完本课后,您应该能够... 创建has_many和belongs_to关联。 通过控制台和db/seeds.rb构建关联的数据。 使用关联提供的方法查询关联数据。... ActiveRecord :: Base has_many :postsend种子数据
显示关联Rails目标学完本课后,您应该能够... 创建has_many和belongs_to关联。 通过控制台和db/seeds.rb构建关联的数据。 使用关联提供的方法查询关联数据。... ActiveRecord :: Base has_many :postsend种子数据
添加到您的 route.rb 文件: mount ModelsTimeline :: Engine => "/models_timeline" 需要 Ruby 1.9.2 或更高版本。 用法 在 ActiveRecord 类中调用时间轴并传递您希望跟踪模型的属性的名称。 跟踪 AR 模型的...
class Comment < ActiveRecord::Base class Create < Trailblazer::Operation contract do property :body, validates: {presence: true} end def process(params) @model = Comment.new...
ActiveRecord :: Base include ShortCircuit :: Presentable attr_accessible :first_name , :last_name , :job_title , :member_since end 创建演示者: # app/presenters/user_presenter.rb class ...