我使用gem ancestry
来创建评论。
现在,我可以列出所有评论。
但我想将序列号推送到每个评论中。
例如,如果有3条评论,则第一条评论注释为1,下一条注释注释为2,..
我不知道怎么做?
- if notice
%p.alert.alert-success= notice
= nested_comments(@comment.subtree.arrange(:order => :created_at))
def nested_comments(comments)
if comments.respond_to? :map
comments.map do |comment, sub_comments|
render(comment) + content_tag(:div, nested_comments(sub_comments), :class => "nested_comments")
end.join.html_safe
end
end
如果我有4条评论,我想为每条评论显示0,1,2,3
但是each_with_index无法成功,因为它是一个递归调用。
comments.each_with_index.map do |(comment, sub_comments), i|
=> {#<Comment id: 2, user_id: 1, ip: nil, content: "I'm id2 the second floor VIVOTEK Releases New Vers...", commentable_id: nil, commentable_type: nil, created_at: "2014-11-07 03:59:38", updated_at: "2014-11-07 06:56:12", ancestry: nil>=>
{#<Comment id: 4, user_id: 1, ip: nil, content: "lala", commentable_id: nil, commentable_type: nil, created_at: "2014-11-07 05:22:41", updated_at: "2014-11-07 05:22:41", ancestry: "2">=>
{#<Comment id: 5, user_id: 1, ip: nil, content: "son of 4", commentable_id: nil, commentable_type: nil, created_at: "2014-11-07 06:38:04", updated_at: "2014-11-07 06:38:04", ancestry: "2/4">=>
{},
#<Comment id: 6, user_id: 1, ip: nil, content: "dild last 252", commentable_id: nil, commentable_type: nil, created_at: "2014-11-07 06:52:15", updated_at: "2014-11-07 06:52:15", ancestry: "2/4">=>
{}}}}
答案 0 :(得分:0)
ruby中的每个可枚举实例都有一个方法each_with_index
,提供an_enumerator
。所以在你的情况下,我建议使用:
- comments.map do |comment, sub_comments|
+ comments.each_with_index.map do |idx, comment, sub_comments|
希望它有所帮助。
答案 1 :(得分:0)
您可以将with_index
与地图
comments.map.with_index do |comment, sub_comments, index|
答案 2 :(得分:0)
我不知道一个优雅的解决方案。但是您可以将计数器传递到nested_comments
函数中,并手动处理问题 - 这可能意味着没有map
。我知道,丑陋。
举一个更简单的例子,如果你需要一个:
def nested_foo(result, string, index)
index += 1
result << "\n#{index}: #{string}"
if index >= 10
return result
else
return nested_foo(result, string, index)
end
end