Як писати if
і if
- else
заяви в Haml для програми Ruby on Rails?
Як писати if
і if
- else
заяви в Haml для програми Ruby on Rails?
Відповіді:
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
or
оператор до умови?
У haml для рубінового коду використовуються два оператори.
=
використовується для рубінового коду, який оцінюється та вставляється в документ. Приклад:
= form_for @user
-
використовується для рубінового коду, який оцінюється і НЕ вставляється в документ. Приклад:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
якщо ви хочете вивести звичайний рядок, як Hi
або Please sign in
. =
необхідний лише для оцінки Рубі, наприклад= "Hi, #{@user.name}"
У 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 %>
Якщо ви хочете поставити умову всередині вашого тегу
%section{:class => "#{'new-class' if controller.action_name == 'index'}"}
ОНОВЛЕННЯ
Ось ще одна варіація
%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}
Ось два посилання:
Перший - це конвертер - ви можете ввести фрагменти html або erb і отримаєте haml!