基本的に私がここでやっているのは、ratings
という4つの異なるタイプを追跡していることです。評価がある場合は、その評価に別のCSSクラスを適用し、その行に表示されている他のスパンにデフォルトのCSSクラスを適用したいと考えています。これをもっともっとドライにするにはどうすればいいですか?
ratings = ["speed", "tackling", "passing", "dribbling"]
ratings.each do |rating|
content_tag :div, class: "col-lg-3" do
if rating_param.eql? rating
if rating.eql? "speed"
content_tag :span, class: "label label-success label-lg" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
elsif rating.eql? "tackling"
content_tag :span, class: "label label-tackling label-lg" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
end
else
content_tag :span, class: "label label-default" do
"#{rating.capitalize}: #{profile.ratings.find_by(user: current_user)[rating]}"
end
end
end
end
だから、私がする必要があるのは、rating
をクラスにマップすることです。例えば
、それは次のようになります。
speed: success, tackling: info, dribbling: primary, passing: warning
。
評価がspeed
の場合は、クラスsuccess
などが適用されます。
これをリファクタリングすると、醜い束ではないif
このような記述はありませんか?
クラスの値を変数として作成し、それを単一の 'content_tag'呼び出しに渡します。 –
@DaveNewtonはより完全な例を見せてくれますか? – marcamillion
'content_tag'はRailsのメソッドだと思うので、Railのタグを追加する必要があります。 –