Cam*_*tin 4 ruby templates ruby-on-rails erb
目前我可以做:
r = ERB.new('Hi there <%= name %>')
r.result(OpenStruct.new(name: 'Joan').instance_eval{ binding })
# Outputs 'Hi there Joan'
Run Code Online (Sandbox Code Playgroud)
但我也可以这样做(在具有管理模型的 Rails 应用程序内运行):
r = ERB.new('<%= Admin.count %>')
r.result(OpenStruct.new.instance_eval{ binding })
# Outputs '10'
Run Code Online (Sandbox Code Playgroud)
换句话说,它可以在调用评估的上下文中访问我的应用程序的所有变量。
有什么方法可以将变量的范围限制为仅我在绑定中提供的内容,例如仅“名称”而没有其他内容?我想在面向用户的模板工具中使用它。
我也尝试过这个(根据另一个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
Run Code Online (Sandbox Code Playgroud)
相同的结果。