加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在一个ERB块中渲染多个表达式的输出

发布时间:2020-12-17 03:24:35 所属栏目:百科 来源:网络整理
导读:我有一个看起来像这样的帮手: 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:
我有一个看起来像这样的帮手:

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方法:连接所有计算表达式的输出并打印为一个字符串:
1.1使用<<和每个link_to周围的括号();
1.2创建一个带双引号的字符串“并在其中插入每个link_to输出#{};
1.3使用concat;
>部分视图:从现有的帮助方法构建单独的视图,并使用<%=%>输出每个link_to.

附:在测试了所有四种方法之后,我得出了一个结论(这里有个人意见),第二种方法更为可取,至少因为它在视图中保持渲染并避免可能看起来混乱的连接.例如,在Devise gem中使用类似的方法,其中所有共享链接都位于app / views / devise / shared / _links.html.erb partial中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读