Rails 4:如何呈现具有多个返回的方法

Mar*_*ino 0 ruby-on-rails helper partial

具有多个返回的方法

def savings_for(id)
    payments = Payment.user_of(id).all
    savings = 0
    num = 0
    payments.each do |payment|
    item = Item.find(payment.id)
        num = num+1
        savings += item.price
    end
    return savings, num
end
Run Code Online (Sandbox Code Playgroud)

我在视图中使用这个帮助器.像这样

<p>You´ve save <b><%=savings_for(current_user)%>$</b></p>
Run Code Online (Sandbox Code Playgroud)

但我不知道如何正确渲染:

You´ve save  [#<BigDecimal:108289ca0,'0.13E3',9(27)>, 3]$
Run Code Online (Sandbox Code Playgroud)

更新:更改了返回方法:

return "<b>#{savings}€</b> en #{num}"
Run Code Online (Sandbox Code Playgroud)

我如何渲染html粗体标签?

jro*_*ind 6

因此,应该返回页面上呈现内容的辅助方法应该返回一个字符串,而不是多个值的数组.

你如何你应该决定自己多要显示的值.你想如何展示它们?也许只是用逗号分隔?好的,所以在helper方法中将其格式化为自己:

  ...
  return "#{savings}, #{num}"
end
Run Code Online (Sandbox Code Playgroud)

更新了更新的答案

更新:更改了返回方法:

return "<b>#{savings}€</b> en #{num}"
Run Code Online (Sandbox Code Playgroud)

我如何渲染html粗体标签?

我这样做:

 def render_savings_for(savings, num)
    safe_join(
       content_tag("b", "#{savings}€"),
       " en ",
       num
    )
 end
Run Code Online (Sandbox Code Playgroud)

编写自己的html渲染助手可能看起来有点令人困惑,但实际上只有一些关于html安全性的简单概念需要理解.我以前试过在这里解释一些:https://bibwild.wordpress.com/2013/12/19/you-never-want-to-call-html_safe-in-a-rails-template/

另一种选择是使用视图部分而不是辅助方法,这不需要你注意html_safety技巧,它会为你处理它,但对于这个简单的东西,我认为帮助方法更简单.

接下来,你将开始询问i18n ......提出一个新问题!:)