如何在p中创建一个强大的元素

时间:2010-07-04 14:45:50

标签: ruby-on-rails haml

在haml中,如何呈现以下令人难以置信的基本HTML:

<p>Results found for <strong>search term</strong>

其中'搜索词'实际上是一个名为@query的Ruby变量?

我正在尝试以下内容,

%p results found for <strong>= @query</strong>

但是从字面上呈现= @query。如果我尝试:

%p results found for <strong>
= @query
</strong>

然后查询字词正确呈现,但是在新行上。

另外,我想知道是否有更好的方法在haml中呈现<strong>,同时保持所有内容都在同一行。

我知道haml documentation,但据我所知,没有一个使用简单的内联Ruby变量的例子。

----- ------- UPDATE

以下代码有效,并展示了如何使用不在标记内的变量:

   %p   
    = @trials_found_count
    results found for
    %strong= @query

但是我觉得它真的不可读 - 很难说它只是一行HTML而不添加上面的评论。

有没有办法可以将所有这些代码放在一行上?或者这就是haml的工作原理?

3 个答案:

答案 0 :(得分:5)

HAML是以空格分隔的。嵌套标签位于下面的行上,而上面的标签中有一个级别。要显示输出的嵌入式Ruby使用'='打开。您不想显示的嵌入式Ruby(例如循环的开头)使用' - '这些等同于&lt;%=%&gt;和&lt; %%&gt;分别在erb。

你想要的是这样的:

%p 
   results found for
   %strong= @query

哪会产生html:

<p>results found for <strong>@query</strong></p>

应该注意,启动Ruby评估的'='只能出现在行的开头或标记声明之后,并且每行只能发生一个标记声明。 您链接的参考文献的Ruby评估部分详细介绍了嵌入式Ruby,以及涵盖嵌入式ruby和许多其他haml基础知识的haml教程: http://haml-lang.com/tutorial.html

答案 1 :(得分:4)

我是这样做的:

%p No results found for <strong>#{h @query}</strong>

答案 2 :(得分:1)

我不确定,但您可能需要一个不间断的空间来保留 for <strong>

之间的空间
%p results found for&nbsp;
   %strong= @query