[英]How can I run a private method in a module in rails console?
我在帮助文件中的私有方法中出错。 带有模块HxHelper
的帮助文件如下所示。 我想在Rails控制台中运行method_2
以在本地系统中重新创建错误。
module HxHelper
def method_1{
"key_1": "@h.htype"
"key_2": "value_2"
+ method_2}
end
private
def method_2{
"key1": "value_1"}
end
在我的控制器文件中,我定义了一个新类并包含以前的帮助器文件。 我尝试了以下方法。
obj = Class.new
和obj.method_1
。 我在method_1中收到错误的未定义方法类型。 炒作是房屋表中的属性。 HxHeleper::method_1
: Error - method_1 is not defined in HxHelper module.
method_2
定义为self
:不起作用。 有人可以帮助我了解我在做什么错吗?
在此示例中,您有一些语法错误。 您要在哈希行的末尾使用逗号,不能将两个哈希加在一起,而需要合并。 合并将接收器(您正在调用合并的对象)并覆盖参数中的所有值。 此外,在哈希中使用:
时,您的键最终会变成符号,这意味着您不需要引号。
这将是定义助手模块的正确方法。
module HxHelper
def method_1
{
key_1: "@h.htype",
key_2: "value_2",
}.merge(method_2)
end
private
def method_2
{
key1: "value_1",
}
end
end
然后,您可以像这样使用它:
class Test
include HxHelper
end
t = Test.new
t.method_1
这将返回:
{:key_1=>"@h.htype", :key_2=>"value_2", :key1=>"value_1"}
如果调用t.method_2
,则会出现有关调用私有方法的错误。
如果method_2的哈希值具有键key_1
,则您的返回值为:
{:key_1=>"value_1", :key_2=>"value_2"}
因为参数中的:key_1
覆盖接收者哈希中的那个。
如果要调用该私有方法,则可以执行以下操作:
t.send(:method_2)
如果您有一个采用参数的方法,则只需在方法名称的符号后添加它们:
private
def test(num1, num2)
return(num1 + num2)
end
send(:test, 1, 2)
这将返回3
假设我们可以解决您的语法问题,那么“我如何在Ruby中调用私有方法?”的标准答案是? 与obj.send( obj.send(:private_method)
中的obj.send(:private_method)
。
手动调试后,学习编写自动化测试。 Rails为他们提供了业界领先的典范支持。 测试将取代您目前正在滥用控制台的实验和调查角色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.