Rails helper in view - 如何呈现 helper 的结果?
Rails helper in view - How to have the result of a helper rendered?
这是我关于 Rails 的第一个问题。我探索了一个月。
在一个视图中,我有一个非常简单的条件来应用一个数字来决定用 span
和 .negative
或 .positive
class(使其变为红色或绿色)。
下面的代码可以正常工作...但是要重复使用很多。
.col-3
- if item.amount.positive?
%span.positive
= item.amount
- else
%span.negative
= item.amount
所以为了DRY,我想让它成为application_helper.rb
中的“帮手”。我找到了这个 How to use Haml in your helpers 并写了一个 helper 如下:
def amountColor(x)
puts "============================================"
- if x.positive?
puts "POSITIVE"
render_haml <<-HAML, amount: x
%span.positive= amount
HAML
else
puts "NEGATIVE"
render_haml <<-HAML, amount: x
%span.negative= amount
HAML
end
puts "============================================"
end
我尝试这样称呼它:
.col-3
-amountColor(item.amount)
Nothing displays just above this line.
在服务器的控制台中,我得到:
Rendering pages/home.html.haml within layouts/application
============================================
NEGATIVE
<span class='negative'>-100</span>
============================================
Rendered pages/home.html.haml within layouts/application (Duration: 1.8ms | Allocations: 1856)
Rendered layout layouts/application.html.haml (Duration: 2.6ms | Allocations: 2379)
Completed 200 OK in 27ms (Views: 3.5ms | ActiveRecord: 2.1ms | Allocations: 13435)
这让我觉得 helper 被调用并且完成了它的工作......但是 span
没有呈现。
现在如果我尝试(=
而不是 -
):
.col-3
= amountColor(item.amount)
它将 span
呈现为文本...
为了实际渲染 HTML,您需要使用 html_safe
= amountColor(item.amount).html_safe
您也可以直接内联它并完全删除对助手的需要:
- klass = item.amount.positive ? 'positive' : 'negative'
%span{class: klass}= item.amount
这是我关于 Rails 的第一个问题。我探索了一个月。
在一个视图中,我有一个非常简单的条件来应用一个数字来决定用 span
和 .negative
或 .positive
class(使其变为红色或绿色)。
下面的代码可以正常工作...但是要重复使用很多。
.col-3
- if item.amount.positive?
%span.positive
= item.amount
- else
%span.negative
= item.amount
所以为了DRY,我想让它成为application_helper.rb
中的“帮手”。我找到了这个 How to use Haml in your helpers 并写了一个 helper 如下:
def amountColor(x)
puts "============================================"
- if x.positive?
puts "POSITIVE"
render_haml <<-HAML, amount: x
%span.positive= amount
HAML
else
puts "NEGATIVE"
render_haml <<-HAML, amount: x
%span.negative= amount
HAML
end
puts "============================================"
end
我尝试这样称呼它:
.col-3
-amountColor(item.amount)
Nothing displays just above this line.
在服务器的控制台中,我得到:
Rendering pages/home.html.haml within layouts/application
============================================
NEGATIVE
<span class='negative'>-100</span>
============================================
Rendered pages/home.html.haml within layouts/application (Duration: 1.8ms | Allocations: 1856)
Rendered layout layouts/application.html.haml (Duration: 2.6ms | Allocations: 2379)
Completed 200 OK in 27ms (Views: 3.5ms | ActiveRecord: 2.1ms | Allocations: 13435)
这让我觉得 helper 被调用并且完成了它的工作......但是 span
没有呈现。
现在如果我尝试(=
而不是 -
):
.col-3
= amountColor(item.amount)
它将 span
呈现为文本...
为了实际渲染 HTML,您需要使用 html_safe
= amountColor(item.amount).html_safe
您也可以直接内联它并完全删除对助手的需要:
- klass = item.amount.positive ? 'positive' : 'negative'
%span{class: klass}= item.amount