Як написати if-condition в Haml?


Відповіді:


131

HAML базується на відступах, і парсер може бути складним. Вам не потрібно використовувати "- end" у Haml. Замість цього використовуйте відступ. У Haml блок починається щоразу, коли відступ збільшується після команди оцінки Ruby. Він закінчується, коли відступ зменшується. Зразок, якщо ще, блокується наступним чином.

- 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

просто використовуйте, якщо я редагував у відповіді. немає потреби мати end.Відступ зробить все інше.
bilash.saha

Відповідь на ваше практичне запитання: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Jeffrey LeCours

Я хотів мати інший оператор, що не виводиться, всередині if like - if current_user - i = 5, і мені було цікаво, чому це не працює, хоча я зробив це з відступом! Нарешті зрозумів - має бути з відступами :)
msanjay

Як додати orоператор до умови?
Джо Хані

18

У haml для рубінового коду використовуються два оператори.

  • = використовується для рубінового коду, який оцінюється та вставляється в документ.

Приклад:

= form_for @user  
  • - використовується для рубінового коду, який оцінюється і НЕ вставляється в документ.

Приклад:

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

1
Зверніть увагу, що вам насправді не потрібно, =якщо ви хочете вивести звичайний рядок, як Hiабо Please sign in. =необхідний лише для оцінки Рубі, наприклад= "Hi, #{@user.name}"
хусточка

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}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.