2016-11-12 84 views
0

我正在渲染我的Profiles#Index視圖。在這種觀點,我把這個helper方法:爲什麼我的content_tag不會生成我期望的HTML?

<%= 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

試試這個,這應該工作

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方法。

相關問題