如何将逻辑写入HTML文件?

时间:2013-05-14 16:32:51

标签: html ruby string

我正在尝试使用一些参数填充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对应r1r2r3是结果键,数字为1,2,3

我似乎放弃了each循环中的所有其他文本。我似乎唯一能够摆脱它的是变量,而不是<h2><ol><li>标签。有人可以告诉我,我做错了吗?

2 个答案:

答案 0 :(得分:4)

虽然您可以尝试使用#{...}使用传统的Ruby内联来执行此操作,但这往往非常尴尬。在大型文本文档中很少见到这一点。

你在这里遇到的问题是你不能用简单的旧字符串插值混合字符串和代码。您需要使用某种模板语言来帮助您完成此操作,您可以在逻辑和文本内容之间切换。

以此为例:

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

#{...}块的内容必须是Ruby代码的完整块。你不能打断它或拆分它。如果你已经习惯了类似PHP的东西,你可以来回切换,你将无法在这里做到。

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

ERB附带Ruby,为您提供更多灵活性:

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

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

%html
  = ruby_content

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

以下是将您的示例粗略地“翻译”为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} />的含义,因此您必须修复该部分。

答案 1 :(得分:0)

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