【问题标题】:Why does my content_tag not produce the HTML I expect?为什么我的 content_tag 没有生成我期望的 HTML?
【发布时间】:2016-11-12 10:57:06
【问题描述】:

我正在渲染我的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

这是为什么呢?

【问题讨论】:

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


    【解决方案1】:

    试试这个,应该可以的

      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

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

    您的辅助方法返回哈希 rating_classes,因为它是方法中的最后一条语句(您看到的 ruby​​ 功能)。在渲染ruby 时,会在每个对象中执行.to_s 方法。

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多