뷰에서 논리 피하기
표준 접근 방식의 문제점 if
은 뷰에서 문 또는 삼진 형식의 논리가 필요하다는 것 입니다. 기본 클래스와 혼합 된 여러 조건부 CSS 클래스가있는 경우 해당 논리를 문자열 보간 또는 ERB 태그에 넣어야합니다.
다음은 뷰에 논리를 넣는 것을 방지하는 업데이트 된 접근 방식입니다.
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
방법
class_string
도우미로 구성된 키 / 값 쌍의 해시 소요 CSS 클래스 이름 문자열 과 부울 값 . 메서드의 결과는 부울 값이 true로 평가 된 클래스 문자열입니다.
샘플 사용
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
기타 사용 사례
이 도우미는 ERB
태그 내에서 또는 link_to
.
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
<% div_for @person, class: class_string(ok: @success) do %>
<% end %>
<% link_to "Hello", root_path, class: class_string(ok: @success) do %>
<% end %>
Either / Or 클래스
삼항이 필요한 사용 사례 (예 :)의 경우 @success ? 'good' : 'bad'
첫 번째 요소가 클래스 true
이고 다른 요소가false
<div class="<%= [:good, :bad] => @success %>">
React에서 영감을 얻음
이 기술은 Facebook의 프런트 엔드 프레임 워크 에서 classNames
(이전에는라고 함 classSet
) 이라는 추가 기능에서 영감을 받았습니다 React
.
Rails 프로젝트에서 사용
현재이 class_names
함수는 Rails에 존재하지 않지만 이 기사 에서는 프로젝트에 함수 를 추가하거나 구현하는 방법을 보여줍니다.