目前,我可以执行以下操作:
r = ERB.new('Hi there <%= name %>')
r.result(OpenStruct.new(name: 'Joan').instance_eval{ binding })
# Outputs 'Hi there Joan'
但是我也可以做到这一点(在具有Admin模型的Rails应用程序中运行):
r = ERB.new('<%= Admin.count %>')
r.result(OpenStruct.new.instance_eval{ binding })
# Outputs '10'
换句话说,它可以在调用评估的上下文中访问我的应用程序的所有变量。
有什么方法可以将变量的范围限制为仅在绑定中提供的变量,例如“名称”,什么都没有?我想在面向用户的模板工具中使用它。
我也尝试过这个(根据另一个SO问题):
class Namespace
def initialize(hash)
hash.each do |key, value|
singleton_class.send(:define_method, key) { value }
end
end
def get_binding
binding
end
end
结果相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句