在Rails 3之前,创建一个扩展find
的插件相对容易:基本上覆盖find
中的ActiveRecord::Base
方法本身,如果需要,可以调用super
。
现在Arel正在Rails 3中使用,(特别是我正在使用Rails 3.1),我将如何做类似的事情呢?问题是许多旧的find
方法已被弃用,支持where
,order
,limit
等范围。在Rails的哪个位置我应该尝试覆盖默认行为吗?
我确信它会比这更复杂,但我能找到的最接近的事情似乎是construct_finder_arel
ActiveRecord::Base
{{1}}方法。
答案 0 :(得分:-1)
在挖掘Rails源代码后,无论使用Arel,都会在执行查找的任何模型上调用find_by_sql
方法。这可以通过alias_method_chain
进行扩展,如下所示:
find_by_sql_with_customization(*args)
results = find_by_sql_without_customization
# do something with results here
results
end
alias_method_chain :find_by_sql, :customization