如何在没有<%= variable%>的情况下输出rthml中的文本

时间:2009-10-23 18:14:27

标签: ruby-on-rails ruby rhtml

在过去的几天里,我一直在寻找这个问题的解决方案。这是一个简单的烦恼,但我不想知道如何做事......

环境:Ruby,Rails,rhtml

问题:当我在rhtml中迭代一个集合时,我希望减少< %%>的数量。和<%=%>我用的标签。以下看起来很臃肿:

Example

<% @products.each do |p| %>
  <%=  @p.name %>
<% end %>

编辑:如何排除&lt;%=%&gt;在街区内?

我更愿意这样做:

<% @products.each do |p| 
  puts @p.name 
end %>

某些情况可能允许使用...但是,我知道我可以用jsp执行此操作:

<% for(int i=0; i<10;i++){
  System.out.print(i);
} %>

提前感谢您的意见。

6 个答案:

答案 0 :(得分:5)

如果你想更简洁地看一下haml,你的例子就是:

- @products.each do |p|
  = @p.name

答案 1 :(得分:2)

<% @products.each do |p| 
  _erbout << @p.name 
end %>

_erbout是ERB(解析.rhtml模板的类)用于构建其输出的变量的默认名称。这非常难看,对我来说感觉有些笨拙,但它确实有用。

答案 2 :(得分:0)

使用print代替put。

答案 3 :(得分:0)

如果您的视图代码看起来过于膨胀,还有其他几种可能性,具体取决于上下文:

  • 使用部分内容。 E.g:

在主文件中:

<%= render(:partial => "product", :collection => products) %>

在部分中,只需使用:

<%= product.name %>

现在这似乎是为了这样一个简单的例子而设计的,但是假设一些更复杂的东西它抽象出循环并使代码更清晰。

  • 使用帮助方法

答案 4 :(得分:0)

您也可以尝试使用像haml这样的东西来清理模板(以及帮助程序和部分文件)。

答案 5 :(得分:0)

你将不得不在这样的块中使用&lt;%=。您可以使用&lt;%= with block:

来实现所需的可读性
<%= @products.map do |p|
      p.name
    end.join("\n") %>