我需要在类和实例方法中调用模型中的辅助方法,例如: model_instance.method
和class Model < ActiveRecord::Base
include ModelHelper
def method
helper_method(self.data)
end
def self.method(data)
self.helper_method(data)
end
end
。但是,类方法总是返回&#34; NoMethodError:未定义的方法&#39; helper_method&#39;对于#&lt; Class ...&gt;&#34;
model.rb:
module ModelHelper
def helper_method(data)
# logic here
end
end
model_helper.rb:
def self.helper_method(data)
我甚至尝试在助手中添加class Model < ActiveRecord::Base
include ModelHelper
def method
helper_method(self.data)
end
# Expose Model.method()
class << self
include ModelHelper
def method(data)
helper_method(data)
end
end
end
无济于事。
经过相当多的搜索后,我无法找到任何关于如何实现这一目标的信息,或者至少找不到任何有用的信息。
答案 0 :(得分:1)
答案结果非常简单,并且不需要任何Rails魔术:你只需重新包含帮助器并在类块中定义类方法:
method
根本不需要更改助手。
现在,您可以在课程和实例上调用./sdell -s 100
!
答案 1 :(得分:0)
如果method
中没有其他逻辑,那么您可以这样做:
class Model < ActiveRecord::Base
include ModelHelper
extend ModelHelper
end
获取实例(@model.helper_method
)和类(Model.helper_method
)方法。
如果由于遗留(或其他)原因,仍希望将method
用作实例和类方法,但method
没有做helper_method
之外的任何事情,那么你可以这样做:
class Model < ActiveRecord::Base
include ModelHelper
extend ModelHelper
alias method helper_method
singleton_class.send(:alias_method, :method, :helper_method)
end
现在你可以@model.method
和Model.method
。
@model.method(:foo).source_location
,试图找出有什么东西来了从。问我怎么知道...