2016-11-12 5 views
0

私はProfiles#Indexビューをレンダリングしています。私の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-3またはspanです。

なぜですか?

答えて

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はすべてのオブジェクトに.to_sメソッドを実行します。

関連する問題