为什么我的 content_tag 没有产生我期望的 HTML?
Why does my content_tag not produce the HTML I expect?
我正在渲染我的 Profiles#Index
视图。在那个视图中,我调用这个辅助方法:
<%= ratings_labels(profile, params[:rating]) %>
就是在profiles_helper.rb
中定义的,像这样:
def ratings_labels(profile, rating_param)
rating_classes = {
'speed' => 'label label-success label-lg',
'tackling' => 'label label-info label-lg',
'passing' => 'label label-warning label-lg',
'dribbling' => 'label label-primary label-lg'
}
rating_classes.each do |rating, klass|
content_tag :div, class: "col-lg-3" do
content_tag :span, class: "#{klass}" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
end
end
end
end
然而,我的 HTML 中的输出是这样的:
{"speed"=>"label label-success label-lg", "tackling"=>"label label-info label-lg", "passing"=>"label label-warning label-lg", "dribbling"=>"label label-primary label-lg"}
注意没有生成 HTML。没有 div.col-lg-3
或 span
。
这是为什么?
试试这个,应该有用
def ratings_labels(profile, rating_param)
rating_classes = {
'speed' => 'label label-success label-lg',
'tackling' => 'label label-info label-lg',
'passing' => 'label label-warning label-lg',
'dribbling' => 'label label-primary label-lg'
}
markup = ''
rating_classes.each do |rating, klass|
markup << content_tag(:div, class: "col-lg-3") do
content_tag :span, class: "#{klass}" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
end
end
markup.html_safe
end
您必须记录单个循环的输出并聚合以获得所需的输出。此外 html_safe
使您的字符串成为 clean
在浏览器中呈现为有效 HTML
.
Notice there is no HTML generated. No div.col-lg-3 or span.
您的辅助方法正在返回散列 rating_classes
,因为它是方法中的最后一条语句(ruby 您看到的功能)。渲染时 ruby
在每个对象中执行 .to_s
方法。
我正在渲染我的 Profiles#Index
视图。在那个视图中,我调用这个辅助方法:
<%= ratings_labels(profile, params[:rating]) %>
就是在profiles_helper.rb
中定义的,像这样:
def ratings_labels(profile, rating_param)
rating_classes = {
'speed' => 'label label-success label-lg',
'tackling' => 'label label-info label-lg',
'passing' => 'label label-warning label-lg',
'dribbling' => 'label label-primary label-lg'
}
rating_classes.each do |rating, klass|
content_tag :div, class: "col-lg-3" do
content_tag :span, class: "#{klass}" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
end
end
end
end
然而,我的 HTML 中的输出是这样的:
{"speed"=>"label label-success label-lg", "tackling"=>"label label-info label-lg", "passing"=>"label label-warning label-lg", "dribbling"=>"label label-primary label-lg"}
注意没有生成 HTML。没有 div.col-lg-3
或 span
。
这是为什么?
试试这个,应该有用
def ratings_labels(profile, rating_param)
rating_classes = {
'speed' => 'label label-success label-lg',
'tackling' => 'label label-info label-lg',
'passing' => 'label label-warning label-lg',
'dribbling' => 'label label-primary label-lg'
}
markup = ''
rating_classes.each do |rating, klass|
markup << content_tag(:div, class: "col-lg-3") do
content_tag :span, class: "#{klass}" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
end
end
markup.html_safe
end
您必须记录单个循环的输出并聚合以获得所需的输出。此外 html_safe
使您的字符串成为 clean
在浏览器中呈现为有效 HTML
.
Notice there is no HTML generated. No div.col-lg-3 or span.
您的辅助方法正在返回散列 rating_classes
,因为它是方法中的最后一条语句(ruby 您看到的功能)。渲染时 ruby
在每个对象中执行 .to_s
方法。