gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:06 26 4
gpt4 key购买 nike

我有一个看起来像这样的助手:

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), method: :post, 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), method: :post, 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), method: :post, 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) 的方法中,在 View 中这样调用:<%= show_vote_buttons(@post) %>

解决这个问题的最佳方法是什么?

最佳答案

基本上,这背后的原因是 <%= %>呈现 show_vote_buttons 的输出方法。此方法未显式返回任何内容,因此返回最后计算的表达式,在您的情况下,最后一个 link_to输出。

在一般情况下,如果您没有使用辅助方法而只是粘贴它的正文而不是多个 link_to电话,你会得到相同的行为。原因类似:<%= %>不渲染每个 link_to ,它在 <%= %> 中执行代码然后输出最后计算表达式的结果。

我看到两种不同的方法来改变输出:

  1. 辅助方法:连接所有求值表达式的输出并打印为一个字符串:
    1.1 使用<<和括号 ()围绕每个 link_to ;
    1.2 创建带双引号的字符串 "并插入每个 link_to输出 #{}在其中;
    1.3 使用 concat ;
  2. 部分 View :从现有的辅助方法构建一个单独的 View 并使用 <%= %>输出每个 link_to .

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

关于ruby-on-rails - 在一个 ERB block 中渲染多个表达式的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com