Haml에서 if 조건을 작성하는 방법?


답변:


131

HAML은 들여 쓰기 기반이며 파서는 까다로울 수 있습니다. Haml에서 "-end"를 사용할 필요가 없습니다. 대신 들여 쓰기를 사용하십시오. Haml에서는 Ruby 평가 명령 후 들여 쓰기가 증가 할 때마다 블록이 시작됩니다. 들여 쓰기가 감소하면 종료되며, else 블록이면 다음과 같이 샘플합니다.

- if condition
  = something
- else
  = something_else

실용적인 예

- if current_user
  = link_to 'Logout', logout_path
- else
  = link_to 'Login', login_path

편집 : if 조건 만 사용하고 싶다면

 - if current_user
  = link_to 'Logout', logout_path

그러나 수식어 만 사용하는 방법
Thillai Narayanan 2011

대답에서 편집 한 것처럼 사용하십시오. 끝이 필요하지 않습니다. 들여 쓰기가 나머지를 처리합니다.
bilash.saha 2011

당신의 실제적인 질문에 대한 답변 : link_to_if api.rubyonrails.org/classes/ActionView/Helpers/...
제프리 LeCours

if like-if current_user-i = 5 안에 또 다른 비 출력 문을 갖고 싶었고 들여 쓰기를했지만 왜 작동하지 않는지 궁금했습니다! 마지막으로 실현 - : 들여 쓰기되어야한다
msanjay

or조건 에 연산자 를 추가하는 방법은 무엇입니까?
Joe Hany

18

haml에서는 두 개의 연산자가 루비 코드에 사용됩니다.

  • = 평가되어 문서에 삽입되는 루비 코드에 사용됩니다.

예:

= form_for @user  
  • - 평가되고 문서에 삽입되지 않는 루비 코드에 사용됩니다.

예:

- if @user.signed_in?  
  = "Hi"  
- else  
  = "Please sign in!"

1
당신이 정말로 필요하지 않습니다 유의하시기 바랍니다 =당신이 출력 일반 같은 문자열을 원하는 경우 HiPlease sign in. =같은 루비를 평가하기위한에만 필요합니다= "Hi, #{@user.name}"
khustochka

8

haml에서 -(대시)를 사용하여 라인이 Ruby 코드임을 나타냅니다. 또한 들여 쓰기 수준은 블록 수준을 나타냅니다. 두 개를 if / else 문에 결합하십시오.

- if signed_in?
  %li= link_to "Sign out", sign_out_path
- else
  %li= link_to "Sign in", sign_in_path

ERB의 다음 코드와 동일합니다.

<% if signed_in? %>
  <li><%= link_to "Sign out", sign_out_path %></li>
<% else %>
  <li><%= link_to "Sign in", sign_in_path %></li>
<% end %>

2

태그 안에 조건을 넣으려면

%section{:class => "#{'new-class' if controller.action_name == 'index'}"}

최신 정보

여기 또 다른 변형이 있습니다

%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.