繁体   English   中英

扩展ActiveRecord method_missing

[英]Extend ActiveRecord method_missing

我一直在网上浏览,发现了大量有关尝试自己的信息,但是我想在Ruby / Rails mixin中添加一点糖,它正在创建一个寻找模式的函数。 我想创建一个称为

is_a_ *

*可以是任何东西。 不管*是什么,都需要可检索,以便我可以在函数内使用它并采取相应的措施。 我必须使用method_missing吗?

这就是method_missing用途,例如,这样的工作应该起作用:

module MyMixin

  def respond_to?(method, priv=false)
    (method.to_s =~ /^is_a_(\w+)$/) || super
  end

  def method_missing(sym, *args)
    if sym.to_s =~ /^is_a_(\w+)$/
      pattern = $1
      # then just do something with pattern here, e.g.:
      puts pattern
    else
      super
    end
  end

end

然后在您的班级中加入MyMixin ,例如:

class A
  include MyMixin
end

a = A.new
a.is_a_foo
#=> "foo"

ps你并不需要严格重写respond_to? ,出于完整性考虑,我仅将其包括在内:

a.respond_to?("is_a_foo")
#=> true
a.respond_to?("is_a_bar")
#=> true
a.respond_to?("is__a_foo")
#=> false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM