Làm thế nào để viết if
và if
- else
câu lệnh trong Haml cho một ứng dụng Ruby on Rails?
Làm thế nào để viết if
và if
- else
câu lệnh trong Haml cho một ứng dụng Ruby on Rails?
Câu trả lời:
HAML dựa trên thụt lề và trình phân tích cú pháp có thể phức tạp. Bạn không cần sử dụng "- end" trong Haml. Thay vào đó, hãy sử dụng thụt lề. Trong Haml, một khối bắt đầu bất cứ khi nào tăng thụt lề sau một lệnh đánh giá Ruby. Nó kết thúc khi thụt lề giảm. Ví dụ nếu khối lệnh khác như sau.
- if condition
= something
- else
= something_else
Một ví dụ thực tế
- if current_user
= link_to 'Logout', logout_path
- else
= link_to 'Login', login_path
Chỉnh sửa: Nếu bạn chỉ muốn sử dụng điều kiện if thì
- if current_user
= link_to 'Logout', logout_path
or
toán tử vào điều kiện?
Trong haml, hai toán tử được sử dụng cho mã ruby.
=
được sử dụng cho mã ruby được đánh giá và được chèn vào tài liệu. Thí dụ:
= form_for @user
-
được sử dụng cho mã ruby được đánh giá và KHÔNG được chèn vào tài liệu. Thí dụ:
- if @user.signed_in?
= "Hi"
- else
= "Please sign in!"
=
nếu bạn muốn xuất chuỗi đơn giản như Hi
hoặc Please sign in
. =
chỉ cần thiết để đánh giá Ruby, chẳng hạn như= "Hi, #{@user.name}"
Trong haml, sử dụng -
(gạch ngang) để chỉ ra một dòng là mã Ruby. Hơn nữa, mức thụt lề cho biết mức khối. Kết hợp hai câu lệnh if / else.
- if signed_in?
%li= link_to "Sign out", sign_out_path
- else
%li= link_to "Sign in", sign_in_path
giống như mã sau trong ERB:
<% if signed_in? %>
<li><%= link_to "Sign out", sign_out_path %></li>
<% else %>
<li><%= link_to "Sign in", sign_in_path %></li>
<% end %>
Nếu bạn muốn đặt điều kiện bên trong thẻ của mình
%section{:class => "#{'new-class' if controller.action_name == 'index'}"}
CẬP NHẬT
Đây là một biến thể khác
%nav(class="navbar"){class: content_for?(:navbar_class) ? yield(:navbar_class) : nil}
Đây là hai liên kết:
Đầu tiên là một trình chuyển đổi - bạn có thể nhập các đoạn mã html hoặc erb và bạn sẽ có được haml!