我正在创建一个扩展 ActiveRecord 模型功能的模块。
这是我的初始设置。
我的课:
class MyClass < ActiveRecord::Base
is_my_modiable
end
和模块:
module MyMod
def self.is_my_modiable
class_eval do
def new_method
self.mod = true
self.save!
end
end
end
end
ActiveRecord::Base(extend,MyMod)
我现在想做的是new_method
通过传入一个块来扩展的功能。像这样的东西:
class MyClass < ActiveRecord::Base
is_my_modiable do
self.something_special
end
end
module MyMod
def self.is_my_modiable
class_eval do
def new_method
yield if block_given?
self.mod = true
self.save!
end
end
end
end
虽然这不起作用,但它是有道理的。在 class_eval 中,new_method 没有被执行,只是被定义,因此在方法实际被调用之前不会执行 yield 语句。
我试图将块分配给 class_eval 中的类变量,然后在方法中调用该类变量,但是在所有 is_my_modiable 模型上都调用了该块,即使它们没有将块传递给方法。
我可能只是重写该方法以获得相同的效果,但我希望有一种更优雅的方法。