2014-09-05 120 views
1

我收到了一些我想通过使用某些部分来简化的信息。基本上,我想做的事的Rails渲染部分内部线条块

<%= 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”两次?

+1

如果删除等号会发生什么? <%2.times {| j |渲染'item_expanded',item:@social_json_feed [i + j],index:(i + j)}%> – javiyu 2014-09-05 14:09:11

+0

它不呈现任何东西。 ERB需要“=”来表示逻辑应该呈现在页面上。 – 2014-09-05 14:23:16

回答

2

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

+0

@RyanB是我的答案清楚吗?它有帮助吗? – 2014-09-05 14:40:26

+0

是的,这确实解释了22回报。我很想找到一种方法来完成我想要的一行代码块。有任何想法吗? – 2014-09-05 15:35:16

1

如果你添加一个电话到map你应该能够保持在一行。

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

给了它一个镜头,这最终返回一个包含部分内容的数组作为字符串x 2.然而有趣的实验。 – 2014-09-05 15:31:58

+0

这是什么代码?它应该只渲染两次。 'i'变量让我觉得你有一个外部循环可能会导致四次渲染。 – 2014-09-05 15:47:00

+0

是的,它是一个循环内的循环。饲料工作的方式要求以一种循环不可能的方式呈现信息。如果您愿意,我可以推送Feed的完整相关代码。 – 2014-09-05 15:54:06