更多关于将参数传递给古巴的erb

时间:2014-05-22 05:13:08

标签: ruby rendering erb cuba

Sinatra的答案似乎并不完全适用于古巴。我想将参数从红宝石环境传递到古巴的erb。这是一个简化的测试,用于从路由环境传入最终代码中的对象数组。

这个简化的样本包括参数化定义颜色'要是"红色",但如果没有设置为任何东西,那么在内部它会被设置为绿色。如果未设置参数,目标代码将需要挽救。按照当前设置,samp1成功呈现erb文件,但它是绿色的。问题解决为:如何在app2.rb中更改samp1(或任何样本)以设置颜色'在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>

文件结尾

3 个答案:

答案 0 :(得分:2)

查看lib/cuba/render.rb和渲染函数的签名:

def render(template, locals = {}, options = {}, &block)
    ...
end

所以,如果你只是在你的电话中给出一个哈希值,它将是本地人:

res.write render("views/hello.erb", :foo => bar, ...)

您也可以明确指出:

res.write render("views/hello.erb", { :foo => bar, ... }, options_hash)

请参阅http://github.com/danizen/cuba-erb-hello

上的工作示例

答案 1 :(得分:0)

我终于成功地使它成功了。在文件app2.rb中,我更改了samp2,如下所示:

# /samp2
on "samp2" do
  res.write render('sample.erb', color: 'red', wid: '400')
end

这改变了颜色和宽度。但我还需要编辑&#39; sample.erb&#39;如下:

  1. 删除所有&lt;%..%&gt;以上材料
  2. 离开&lt;:= color%&gt;原样。
  3. 更改... width =&#34; 200&#34; ... to ... width =&#39;&lt;%= wid%&gt;&#39; ...
  4. 我添加了宽度以确保解决方案能够很好地完成,并且确实如此。这表明任何对象或对象集都可以从Ruby传递给erb。

答案 2 :(得分:0)

在上面的答案中,错误为1。 它应显示为:“删除&lt;%=和%&gt;”之间的html标记上方的所有材料,但是当我输入答案时,我使用了括号标记。