我需要在一个模型中调用一个helper方法,从一个类和一个示例方法中调用,例如Model.method(data)
和model_instance.method
。未定义#的方法'helper_method'”
型号.rb:
class Model < ActiveRecord::Base
include ModelHelper
def method
helper_method(self.data)
end
def self.method(data)
self.helper_method(data)
end
end
模型助手.rb:
module ModelHelper
def helper_method(data)
# logic here
end
end
我甚至尝试在助手中添加def self.helper_method(data)
,但都无济于事。
经过相当多的搜索,我无法找到任何关于如何实现这一点,或至少任何工作。
3条答案
按热度按时间mutmk8jj1#
答案很简单,不需要任何Rails技巧:您只需重新包含helper并在类块中定义类方法:
根本不需要对助手进行任何更改。
现在您可以在类和示例上调用
method
了!e37o9pze2#
如果
method
中没有其他逻辑,那么您可以简单地执行以下操作:并同时获取示例(
@model.helper_method
)和类(Model.helper_method
)方法。如果由于遗留(或其他)原因,您 * 仍然 * 希望使用
method
作为示例 * 和 * 类方法,但method
与helper_method
没有任何不同,那么您可以执行以下操作:现在您可以执行
@model.method
和Model.method
。顺便说一句,使用模块在类中包含方法是很诱人的,但是如果你不小心的话,很快就会离开你,让你做很多
@model.method(:foo).source_location
,试图找出一些东西是从哪里来的。问我怎么知道的...mwkjh3gx3#
您需要将model_helper.rb定义为:
并在model.rb中调用此方法,如下所示: