繁体   English   中英

如何在Rails控制台的模块中运行私有方法?

[英]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

在我的控制器文件中,我定义了一个新类并包含以前的帮助器文件。 我尝试了以下方法。

  1. 创建了我的类的对象,分别为obj = Class.newobj.method_1 我在method_1中收到错误的未定义方法类型。 炒作是房屋表中的属性。
  2. 尝试过HxHeleper::method_1Error - method_1 is not defined in HxHelper module.
  3. 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.

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