ben*_*ben 25 ruby ruby-on-rails erb block
我正在使用Ruby on Rails,需要在我的一个html.erb文件中运行一段Ruby代码.我是这样做的:
<% def name %>
<% name = username %>
<%= name %>
Run Code Online (Sandbox Code Playgroud)
或者像这样:
<% def name
name = username %>
<%= name %>
Run Code Online (Sandbox Code Playgroud)
谢谢阅读.
nat*_*vda 37
如果您在视图中需要额外的功能,通常会在帮助器中声明这些功能.
对于每个控制器,如果有一个帮助器,它会自动加载.例如,如果你有一个PeopleController,在app/helpers文件夹中应该有一个people_helper.rb,它应该是这样的
module PeopleHelper
def name
#do something
username
end
end
Run Code Online (Sandbox Code Playgroud)
另一个非常干净的选择是使用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 %>
Run Code Online (Sandbox Code Playgroud)
另外对我来说代码缩进比html缩进更重要,所以我更喜欢像
<table>
<% @rows.each do |row| %>
<tr>
<td><%= row.item1 %></td>
<% if row.some_test %>
<td><%= row.item2 %></td>
<% end %>
</tr>
<% end %>
</table>
Run Code Online (Sandbox Code Playgroud)
但我总是很有兴趣听到这个问题的不同意见.
shi*_*ara 24
在ERB文件中定义方法是不常见的,所以我建议不要这样做.
如果你想调用一个块#each,你可以做类似以下的事情:
<% names.each do |name| %>
<%= name %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
别忘了<% end %>.
| 归档时间: |
|
| 查看次数: |
37671 次 |
| 最近记录: |