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 以访问它。
我有以下代码:
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 以访问它。