Rails在Helper中渲染部分
我一直试图在我的控制器内的辅助函数中渲染我的一个部分。
我遇到的第一个问题是帮助程序返回每个循环而不是循环的结果。 为了解决这个问题,我尝试让它返回一个包含循环结果的字符串。
def display_replies(comment) if comment.replies.count > 0 string = "" comment.replies.each do |reply, index| string = string + (render partial: "comment", locals: {index: index}).to_s.html_safe end string end
在View中调用
当我查看我的视图时,返回并显示的内容是HTML,但它是转义的,因此是纯文本,它看起来像这样:
["\n\n\n\n \n\n"]
我只是想这是常规的非转义HTML。 我在某处读到添加html_safe会解决这个问题,但唉它没有。
然后去哪儿?
实际上,html_safe应该像这样使用: –
<%= display_replies(reply).html_safe %>
要修复\n
和["
,我们需要在循环之后使用.join
。就像这样:
帮手:
def display_replies(comment) if comment.replies.count > 0 raw( comment.replies.map do |reply, index| render 'comment', index: index end.join ) end end
视图:
<%= display_replies(reply) %>
请注意,我删除了所有html_safe
并替换为raw
。 而不是each
循环,我使用map
,所以我们不必创建变量string
并在循环后返回它。
希望这可以帮助!
您可以像这样使用html_safe方法
<%= html_safe display_replies(reply) %>