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

84

Как написать ifи if- elseзаявления в Haml для в Ruby On Rails приложения?

Тиллай Нараянан
источник

Ответы:

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!"
Pratik Ganvir
источник
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}
Антон Сергеев
источник
-2

Вот две ссылки:

  1. https://html2haml.herokuapp.com/
  2. http://haml.info/tutorial.html

Первый - это конвертер - вы можете ввести фрагменты HTML или ERB, и вы получите haml!

gkstr1
источник
2
он может ответить на вопрос, но существенная часть кода должна быть здесь
Инзимам Тарик IT