在查找之前实现ActiveRecord
我正在使用缓存在表中的关键字构建搜索。在表中查找用户输入的关键字之前,它是标准化的。例如,删除了一些标点符号,如“-”,并对外壳进行了标准化。然后使用规范化关键字查找和获取搜索结果在查找之前实现ActiveRecord,activerecord,callback,Activerecord,Callback,我正在使用缓存在表中的关键字构建搜索。在表中查找用户输入的关键字之前,它是标准化的。例如,删除了一些标点符号,如“-”,并对外壳进行了标准化。然后使用规范化关键字查找和获取搜索结果 我目前正在使用before_过滤器在控制器中处理规范化。我想知道是否有办法在模型中实现这一点。概念上类似于“before_find”回调的方法可以工作,尽管对于实例级别来说没有意义 您可能不想通过覆盖find来实现这一点。覆盖像find这样的东西可能会让人头疼 您可以创建一个类方法来完成您需要的工作,例如: clas
我目前正在使用before_过滤器在控制器中处理规范化。我想知道是否有办法在模型中实现这一点。概念上类似于“before_find”回调的方法可以工作,尽管对于实例级别来说没有意义 您可能不想通过覆盖find来实现这一点。覆盖像find这样的东西可能会让人头疼 您可以创建一个类方法来完成您需要的工作,例如:
class MyTable < ActiveRecord::Base
def self.find_using_dirty_keywords(*args)
#Cleanup input
#Call to actual find
end
end
classmytable
如果你真的想找到超负荷,你可以这样做:
例如:
class MyTable < ActiveRecord::Base
def self.find(*args)
#work your magic here
super(args,you,want,to,pass)
end
end
classmytable
有关子类化签出的详细信息,请访问此链接:与上述内容类似,您也可以使用
alias\u方法\u链
class YourModel < ActiveRecord::Base
class << self
def find_with_condition_cleansing(*args)
#modify your args
find_without_condition_cleansing(*args)
end
alias_method_chain :find, :condition_cleansing
end
end
classyourmodel 类您应该使用命名作用域:
class Whatever < ActiveRecord::Base
named_scope :search, lambda {|*keywords|
{:conditions => {:keyword => normalize_keywords(keywords)}}}
def self.normalize_keywords(keywords)
# Work your magic here
end
end
class which{:关键字=>规范化_关键字(关键字)}}
定义自我规范化_关键字(关键字)
#在这里施展你的魔法
结束
结束
使用命名作用域将允许您与其他作用域进行链接,这确实是使用Rails3的方法