Mat*_*ski 6 ruby ruby-on-rails
我一直认为以下只是两种说法相同的方式:
[1,2,3].collect{|i| i * 2}
[1,2,3].collect do |i|
i * 2
end
Run Code Online (Sandbox Code Playgroud)
但是我在我的一个ERB模板中得到了一些奇怪的行为,其中两个语法似乎做了两件不同的事情.这段代码效果很好:
<%=raw @menu.collect { |m|
content_tag("li") {
link_to(m.capitalize, url_for(:controller => m))
}
} %>
Run Code Online (Sandbox Code Playgroud)
但当我重写它时:
<%=raw @menu.collect do |m|
content_tag("li") do
link_to(m.capitalize, url_for(:controller => m))
end
end %>
Run Code Online (Sandbox Code Playgroud)
...我最终得到了一串连结的@menu项目.我错过了什么吗?这里有一些细小的语法糖吗?
我会使用您的第一种方法或将此代码放在视图助手中。但如果我确实想使用块,我可能会这样做。
<% @menu.collect do |m| %>
<%= content_tag("li") do %>
<% link_to(m.capitalize, url_for(:controller => m)) %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |