Как написать if
и if
- else
заявления в Haml для в Ruby On Rails приложения?
Как написать if
и if
- else
заявления в Haml для в Ruby On Rails приложения?
Ответы:
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
or
оператора в условие?
В haml для кода ruby используются два оператора.
=
используется для кода рубина, который оценивается и вставляется в документ. Пример:
= form_for @user
-
используется для кода рубина, который оценивается и НЕ вставляется в документ. Пример:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
выводить простую строку, например Hi
или Please sign in
. =
нужно только для оценки Ruby, вроде= "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!