别名在rails ActiveRecord中的find_by方法

时间:2010-11-20 23:12:17

标签: ruby-on-rails ruby activerecord

所以这就是问题,因为AR中的find_by方法使用了Method Missing技术,你实际上不能用alias_method对它们进行别名(因为该方法不存在!)。或者看起来如此。

有人知道怎么做吗?

为了提供更多细节,我想做的就是这个..

我有一个AR模型,User,但它从辅助数据源增加了它的一些属性 - 这应该是默认行为。最初要实现这一点,我使用了after_find回调,并在那时附加了第二个数据源中的新属性。

问题是我希望能够偶尔使用find_by方法而不增加第二个数据源。

我现在的想法是使用别名来创建两种find_by方法:find_by和find_without_by。

理想的情况是,如果rails有一些魔法酱可以让你在alias_method中使用通配符,导致:

  

alias_method:find_without *,:find *

有什么建议吗?如果需要,我可以澄清任何具体要点。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您可以在自己的模型中定义method_missing,然后在find_without_abc调用时传递给缺少的常规方法:

MyModel < ActiveRecord::Base
  def method_missing(method, *args)
    return super(method, args) if method =~ /find_without/

    # Your custom find code is here...
  end
end