Sinatra 的答案似乎并不完全适用于古巴。我想将一个参数从 ruby 环境传递给古巴的 erb。这是一个简化的测试,用于从路由环境传入最终代码中的对象数组。
这个简化的示例包括将“颜色”参数化定义为“红色”,但如果它没有设置为任何值,则在内部将其设置为绿色。如果未设置参数,目标代码将需要退出。按照当前设置,samp1 成功渲染了 erb 文件,但它是绿色的。问题解决为:我必须如何更改 app2.rb 中的 samp1(或任何 samp-n)才能将 sample.erb 中的“颜色”设置为红色?希望我可以抽象出答案,以便在全球范围内用于我的目的。请注意,其他 samp-n 是其他失败的尝试。
非常感谢您的帮助。
文件:
app2.rb:
require 'cuba'
require 'erb'
require 'cuba/render'
require 'tilt/erubis'
Cuba.plugin Cuba::Render
Cuba.define do
# only GET requests on get do
# /samp1
on "samp1" do
res.write render('sample.erb')
end
# /samp2
on "samp2" do
ns = OpenStruct.new(color: 'red')
template = File.read('./sample.erb')
res.write render(template).result(ns.instance_eval {binding})
end
# /samp3
on "samp3" do
ns = OpenStruct.new(color: 'red')
template = File.read('./sample.erb')
res.write erb(template).result(ns.instance_eval {binding})
end
# /samp4
on "samp4" do
locals = {}
locals["color"]="red"
res.write render('sample.erb',locals)
end
# /Cuba
on Cuba do
res.write "hello, Cuba!"
end end end
以及以下 config.ru:
require './app2'
run Cuba
最后,erb 文件 sample.erb:
<%
color = ARGV[0]
color = "green" if color.nil?
%>
<html>
<head>
<title>Square</title>
</head>
<body>
<h1>Square</h1>
<svg width="700" height="500"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Sample Board</desc>
<style type="text/css"> <![CDATA[
rect.a {stroke:black; fill:<%=color%>}]]>
</style>
<rect class="a" x="100" y="50" width="200" height="200" stroke_width="10"/>
</svg>
</body>
</html>
文件结束