Rails在单行块内部渲染部分

时间:2014-09-05 14:07:56

标签: ruby-on-rails ruby block enumeration partials

我有一些信息,我希望通过使用一些部分来简化。基本上,我想按照

的方式做点什么
<%= 2.times { |j| render 'item_expanded', item: @social_json_feed[i + j], index: (i + j) } %>

但是,上面的代码不会呈现部分代码。相反,它返回值“2”两次。如果我将块写为do-end块,它可以像预期的那样工作。

<% 2.times do |j| %>
  <%= render 'item_expanded', item: @social_json_feed[i + j], index: (i + j) %>
<% end %>

以我想要的方式产生部分。但是如果do-end块正常工作,那么单行块也应该能够正常工作,对吧?它只是关于单行块如何格式化或者是否更深入Rails魔术?另外,为什么代码的第一个例子两次返回“2”?

2 个答案:

答案 0 :(得分:2)

这是因为在第一种情况下,它仅呈现2.times方法调用的返回值,即2。您应该只使用第二种表示法。

答案 1 :(得分:1)

如果您添加了对map的通话,您应该可以将其全部保留在一行。

<%= 2.times.map { |j| render 'item_expanded', item: @social_json_feed[i + j], index: (i + j) } %>