Làm thế nào để viết if-điều kiện trong Haml?


Câu trả lời:


131

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

Nhưng làm thế nào để sử dụng chỉ khi modifier
Thillai Narayanan

chỉ sử dụng nếu như tôi đã chỉnh sửa trong câu trả lời. không cần phải có phần cuối. thụt lề sẽ làm phần còn lại.
bilash.saha

Câu trả lời cho câu hỏi thực tế của bạn: link_to_if api.rubyonrails.org/classes/ActionView/Helpers/…
Jeffrey LeCours

Tôi muốn có một câu lệnh không phải đầu ra khác bên trong if like - if current_user - i = 5 và tự hỏi tại sao nó không hoạt động mặc dù tôi đã thụt lề vào nó! Cuối cùng nhận ra - phải được thụt :)
msanjay

Làm thế nào để thêm ortoán tử vào điều kiện?
Joe Hany

18

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!"

1
Xin lưu ý rằng bạn không thực sự cần =nếu bạn muốn xuất chuỗi đơn giản như Hihoặc Please sign in. =chỉ cần thiết để đánh giá Ruby, chẳng hạn như= "Hi, #{@user.name}"
khustochka

8

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 %>

2

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}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.