ruby-on-rails – 在一个ERB块中渲染多个表达式的输出
我有一个看起来像这样的帮手:
if current_user.find_voted_items(vote_scope: :inspired).include?(post) link_to vote_inspired_post_path(post,vote_scope: :inspired),method: :post,data: { confirm: 'Are you sure this post Inspires you?' },class: "btn btn-default" do "<i class='fa fa-lightbulb-o'></i> <br />Inspired".html_safe end link_to vote_happy_post_path(post,vote_scope: :happy),data: { confirm: 'Are you sure this post makes you happy?' },class: "btn btn-success" do "<i class='fa fa-smile-o'></i> <br />Happy".html_safe end link_to vote_disappointed_post_path(post,vote_scope: :disappointed),data: { confirm: 'Are you sure this post disappointed you?' },class: "btn btn-info" do "<i class='fa fa-meh-o'></i> <br />Disappointed".html_safe end link_to vote_upset_post_path(post,vote_scope: :upset),data: { confirm: 'Are you sure this post upsets you?' },class: "btn btn-inverse" do "<i class='fa fa-frown-o'></i> <br />Upset".html_safe end end 我需要所有的链接和他们的嵌套< i>要呈现的标记 – 但由于某种原因,此版本只是呈现最后一行. 所有这些都在名为show_vote_buttons(post)的方法中,在视图中就像这样调用:<%= show_vote_buttons(@post)%> 解决这个问题的最佳方法是什么? 解决方法
基本上,这背后的原因是<%=%>呈现show_vote_buttons方法的输出.此方法不显式返回任何内容,因此返回最后一个计算的表达式,在您的情况下,返回最后一个link_to输出.
在一般情况下,如果您没有使用辅助方法并且仅使用多个link_to调用粘贴它的正文,您将获得相同的行为.原因类似:<%=%>不呈现每个link_to,它执行<%=%>内的代码然后输出最后评估表达式的结果. 我看到两种不同的方法来改变输出: > Helper方法:连接所有计算表达式的输出并打印为一个字符串: 附:在测试了所有四种方法之后,我得出了一个结论(这里有个人意见),第二种方法更为可取,至少因为它在视图中保持渲染并避免可能看起来混乱的连接.例如,在Devise gem中使用类似的方法,其中所有共享链接都位于app / views / devise / shared / _links.html.erb partial中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |