为什么我的content_tag不会产生我期望的HTML?

时间:2016-11-12 02:13:53

标签: ruby-on-rails ruby-on-rails-5

我正在渲染我的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"=&gt;"label label-success label-lg", "tackling"=&gt;"label label-info label-lg", "passing"=&gt;"label label-warning label-lg", "dribbling"=&gt;"label label-primary label-lg"}

请注意,没有生成HTML。没有div.col-lg-3span

为什么?

1 个答案:

答案 0 :(得分:1)

试试这个,这应该有效

html_safe

您必须记录单个循环和聚合的输出以获得所需的输出。此外,clean会使您的字符串HTML在浏览器中呈现为有效rating_classes

  

请注意,没有生成HTML。没有div.col-lg-3或span。

你的helper方法返回哈希ruby,因为它是方法中的最后一个语句(你看到的ruby功能)。渲染.to_s时会在每个对象中执行{{1}}个方法。