Как написать if-условие в Haml?


Ответы:


131

HAML основан на отступах, и синтаксический анализатор может быть сложным. Вам не нужно использовать "- end" в Haml. Вместо этого используйте отступ. В Haml блок начинается всякий раз, когда отступ увеличивается после оценочной команды Ruby. Он заканчивается, когда отступ уменьшается. Пример блока if 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

Но как использовать только модификатор if
Тиллай Нараянан

просто используйте, если, как я отредактировал в ответе. конец не нужен. Остальное сделает отступ.
bilash.saha 08

Ответ на ваш практический вопрос: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Джеффри Лекурс,

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

1
Как добавить orоператора в условие?
Джо Хэни

18

В haml для кода ruby ​​используются два оператора.

  • = используется для кода рубина, который оценивается и вставляется в документ.

Пример:

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

Пример:

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

1
Обратите внимание, что вам не нужно =выводить простую строку, например Hiили Please sign in. =нужно только для оценки Ruby, вроде= "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.