我对模型类的代码添加搜索方法由meta_search
宝石可以使用动态添加类的方法到Rails模型:如何使用模块
class Model
self.def created_at_lteq_at_end_of_day(date)
where("created_at <= ?", DateTime.strptime(date, '%d/%m/%Y').end_of_day)
end
search_methods :created_at_lteq_at_end_of_day
end
该代码添加搜索方法日期字段。 现在,需要将此搜索方法添加到其他类和其他字段。 为了实现这一目标,该模块被创造:
的lib/meta_search/extended_search_methods.rb
module MetaSearch
module ExtendedSearchMethods
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def add_search_by_end_of_day(field, format)
method_name = "#{field}_lteq_end_of_day"
define_method method_name do |date|
where("#{field} <= ?", DateTime.strptime(date, format).end_of_day)
end
search_methods method_name
end
end
end
end
class Model
include MetaSearch::ExtendedSearchMethods
add_search_by_end_of_day :created_at, '%d/%m/%Y'
end
添加模块后,这个错误开始上升:
undefined method `created_at_lteq_end_of_day' for #<ActiveRecord::Relation:0x007fcd3cdb0e28>
其他解决方案:
更改define_method
到define_singleton_method
您是否包含MetaSearch? – screenmutt