ERB 模板绑定不级联到助手

ERB template binding not cascading to helper

我有以下代码:

user = "GG"
erb = ERB.new "Hi <%= user %>!"
    
puts erb.result(binding)

导致正确 Hi GG!

如果我创建一个助手:

module Helper
  def hello
    "hello"
  end
end

include Helper

erb = ERB.new "Hi <%= hello %>!"
    
puts erb.result(binding)

仍然有效并放置:Hi hello!

但是如果我在助手中使用上下文中的变量,我会遇到问题:

module Helper
  def hello
    "hello #{user}"
  end
end

include Helper

user = "GG"
erb = ERB.new "Hi <%= hello %>!"
    
puts erb.result(binding)

我得到:

NameError: undefined local variable or method `user' for main:Object

为什么会这样?我该如何解决?

谢谢。

更新 我尝试将变量设置为实例变量:

module Helper
  def hello
    "hello #{@user}"
  end
end

include Helper

@user = "GG"
erb = ERB.new "Hi <%= hello %>!"
    
puts erb.result(binding)

这似乎有效,但我不确定有什么区别。

在 rspec 测试中,我也需要它来工作,在 rails 服务(在应用程序中)中,相同的代码运行良好。

这与ERB无关。只需调用 hello 而不是 ERB.new "Hi <%= hello %>!".result(binding) 即可查看。

方法无法访问未在其中定义的局部变量。将 user 转换为方法或 instance_variable 以访问它。