1

在过去的几天里,我一直在寻找这个问题的解决方案。这是一个简单的烦恼,但我讨厌不知道该怎么做......

环境:Ruby、Rails、rhtml

问题:当我在 rhtml 中迭代一个集合时,我想减少我使用的 <% %> 和 <%= %> 标记的数量。以下似乎臃肿:

例子

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

编辑:如何在块内排除 <%= %> ?

我更愿意这样做:

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

某些情况下可能允许使用其中任何一种...但是,我知道我可以使用 jsp 来做到这一点:

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

提前感谢您的意见。

4

6 回答 6

5

如果您想不那么冗长,请查看haml,以您的示例为例:

- @products.each do |p|
  = @p.name
于 2009-10-23T19:19:00.827 回答
2
<% @products.each do |p| 
  _erbout << @p.name 
end %>

_erbout是 ERB(解析 .rhtml 模板的类)用于构建其输出的变量的默认名称。这很丑陋,对我来说有点hacky,但它有效。

于 2009-10-23T18:25:40.497 回答
0

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

  • 使用部分。例如:

在你的主文件中:

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

在部分中,只需使用:

<%= product.name %>

现在,对于像这样的简单示例来说,这似乎是人为的,但假设一些更复杂的东西,它会抽象出循环并使代码更清晰。

  • 使用辅助方法
于 2009-10-23T19:11:33.850 回答
0

您还可以尝试使用 haml 之类的东西来清理模板(以及助手和部分)。

于 2009-10-23T19:18:34.587 回答
0

使用打印而不是放置。

于 2009-10-23T18:26:30.493 回答
0

您将不得不在这样的块内使用 <%= 。您可以通过将 <%= 与块一起使用来实现所需的可读性:

<%= @products.map do |p|
      p.name
    end.join("\n") %>
于 2009-10-24T13:17:03.523 回答