如何在html.erb文件中运行多行Ruby

我正在使用Ruby on Rails,需要在我的一个html.erb文件中运行一段Ruby代码。 我这样做是这样的:

   

或者像这样:

   

谢谢阅读。

在ERB文件中定义方法是不常见的,所以我建议不要这样做。

如果你想调用像#each这样的块,你可以执行以下操作:

 <% names.each do |name| %> <%= name %> <% end %> 

不要忘记<% end %>

如果您在视图中需要额外的function,通常会在帮助器中声明这些function。

对于每个控制器,如果有一个帮助器,它会自动加载。 例如,如果你有一个PeopleController,在app/helpers文件夹中应该有一个people_helper.rb ,它应该看起来像这样

 module PeopleHelper def name #do something username end end 

另一个非常干净的选择是使用Presenter 模式 ,但我认为它不常见(不幸的是)。

否则,如果你确实需要erb视图中的多行ruby代码,我试图避免,我更喜欢以下样式:

 <% counter_1 = 0 counter_2 = 1 do_some_more_prep_here %> <% @records.each do |rec|%> <%# do something with the prepped date in each row %> <% end %> 

另外对我来说代码缩进比html缩进更重要,所以我更喜欢像

  <% @rows.each do |row| %>  <% if row.some_test %>  <% end %>  <% end %> 
<%= row.item1 %><%= row.item2 %>

但我总是很有兴趣听到这个问题的不同意见。

我可以想象有人在一个特定模板中需要它(没有创建帮助器的点)不重复html标记。 也就是说,当得到的html页面有几个类似的html标记块时。 虽然,它很容易被滥用(不可读的代码)。

 <% def f1(a, b, c) %> test: <%= a %>, <%= b %>, <%= c %> <% end %> <% f1(1, 2, 3) %> <% f1(4, 5, 6) %>