0

我正在尝试使用一些参数填充 HTML 文件:

<!DOCTYPE html>
        <html>
        <head>
        <title>'Breakdown'</title>
        </head>
        <body>
            <h1 'Breakdown'>
            </h1>
  #{a.each do |k,v|
    k.each do |b|
      "<h2 #{a} />"
      "<ol id='resultsFor#{a}'>"
      v.each do |result,number|
      "<li #{number} #{result} />"
      end
      "</ol>"
    end
  end}
        </body>
        </html>"

这是我的输出:

        <html><head>
        <title>Tests Breakdown</title>
        </head>
        <body>
            <h1 'breakdown' >
            </h1>
         abcr11r20r33

        </body></html>

其中abc, r1,r2r3是结果键,数字是1,2,3

我似乎松开了each循环中的所有附加文本。我似乎唯一能摆脱的是变量而不是<h2>,<ol><li>标签。有人可以告诉我我做错了什么吗?

4

2 回答 2

4

尽管您可以尝试使用传统的 Ruby 内联来执行此操作#{...},但这往往非常尴尬。在大型文本文档上很少看到这样做。

您在这里遇到的问题是您不能将字符串和代码与普通的旧字符串插值混合。你需要某种模板语言来帮助你,你可以在逻辑和文本内容之间切换。

以此为例:

"<html>#{ruby_content}</html>"

块的内容#{...}必须是完整的 Ruby 代码块。你不能打断它或分裂它。如果您习惯了 PHP 之类的东西,您可以在其中来回切换,那么您将无法在这里做到这一点。

还有其他更易于管理的表达方式。

ERB与 Ruby 一起提供,并为您提供更大的灵活性:

<html><%= ruby_content %></html>

更好的是HAML,它看起来像这样:

%html
  = ruby_content

HAML 可能需要一些时间来适应,但它实际上可以保证发出有效的 HTML 文档,从而节省大量时间来追踪不正确的关闭标签或其他在手动编写 HTML 时必然会出现的随机错误。

这是您的示例到 HAML 的粗略“翻译”:

!!!
%html
  %head
    %title
      Breakdown
  %body
    %h1
      Breakdown
    - a.each do |k, v|
      - k.each do |b|
        %h2
          %ol{ :id => "resultsFor#{a}" }
          - v.each do |result, number|
            %li
              = "#{number} #{result}"

我不确定你打算如何处理那些<h2 #{a} />不是有效的 HTML 之类的东西,或者是什么<li #{number} #{result} />意思,所以你必须修复那部分。

于 2013-05-14T16:44:09.970 回答
0

所以我所做的是我在 html 之外组装了字符串。这使我可以使用 #{} 运算符在 ruby​​ 代码和字符串文本之间进行交换。然后,一旦我用我想要的数据编译了字符串,我就将字符串插入了我的 writer

于 2013-05-15T14:21:22.867 回答