기본적으로 여기서 내가하는 일은 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'은 레일스 메소드라고 생각합니다. 레일 태그를 추가해야합니다. –