Tổng hợp các cú pháp embedded ruby ít người biết!
Bài đăng này đã không được cập nhật trong 5 năm
Giới thiệu
Đối với các rails developer thì hẳn là các bạn đã quá quen với các cú pháp trong file .erb
như <% %>
, <%= %>
, <%# %>
. Tuy nhiên, vẫn còn các cú pháp mà nhiều người chưa biết. Vì vậy, trong bài viết này mình sẽ tổng hợp những cú pháp đó và hy vọng các bạn có thể hiểu thêm về Embedded Ruby cũng như bỏ túi cho mình một số các cú pháp hữu dụng nhé.
Sơ lược
Những cú pháp mà ta dùng hằng ngày được bắt nguồn từ eRuby
, nó là một templating system cho phép viết code vào trong file HTML, tương tự như ASP, PHP, JSP, ... Bản stable release mới nhất là 1.0.5 vào ngày 14 tháng 12 năm 2004. Có ba thư viện implement thư viện này:
Tuy nhiên, trong bài viết này, mình sẽ chỉ tổng hợp các cú pháp của erubis
mà thôi, đơn giản là vì rails sử dụng gem này OK, let's go!
Cú pháp -%>
và =%>
-%>
dùng để loại bỏ khoảng trắng và dòng trống khi render html, còn =%>
thực chất là chỉ thay thế cho -%>
để dễ nhìn hơn chứ không có sự khác biệt nào cả.
Trường hợp dùng %>
code:
<% x = "don't remove tail spaces and newline" %>
<% 5.times do |index| %>
<%= x %>
<% end %>
html:
<body>
don't remove tail spaces and newline
don't remove tail spaces and newline
don't remove tail spaces and newline
don't remove tail spaces and newline
don't remove tail spaces and newline
</body>
Trường hợp dùng =%>
code:
<% x = "remove tail spaces and newline" %>
<% 5.times do |index| %>
<%= x =%>
<% end %>
html:
<body>
remove tail spaces and newline
remove tail spaces and newline
remove tail spaces and newline
remove tail spaces and newline
remove tail spaces and newline
</body>
Về phần mình thì mình thấy cú pháp này không quá quan trọng, tuy nhiên trong một số gem (ví dụ: devise) có sử dụng cú pháp này. Vì thế mình viết vào đây để các bạn có thể hiểu thêm.
Cú pháp <%==
Thông thường, để escape html tag, các bạn sẽ phải dùng .html_safe
, raw
hoặc là thêm hậu tố _html
trong file .yml
khi dùng i18n
. Tuy nhiên, các cách này ít nhiều cũng sẽ gây bất tiện trong quá trình code. Thay vì thế, các bạn có thể dùng <%==
, nó cũng sẽ escape html tag tương tự như các cách trên, ngoài ra code trông sẽ compact hơn rất nhiều!
code:
<% x = "<span>< ></span>" %>
use nothing <%= x %><br>
using <%== <%== x %><br>
using raw helper method <%= raw x %><br>
using html_safe <%= x.html_safe %><br>
html:
<body>
use nothing <span>< ></span>
<br>
using <%== < >
<br>
using raw helper method < >
<br>
using html_safe < >
<br>
</body>
Các cú pháp khác
Ngoài ra, còn có rất nhiều các cú pháp "dị hợm" khác. Tuy nhiên, các cú pháp này không hữu dụng lắm, một số bị trùng lặp không cần thiết và một số không chạy được trong môi trường rails (chỉ chạy được trên erubis
) nên mình sẽ bỏ qua. Nếu muốn các bạn có thể tham khảo erubis để biết thêm chi tiết nhé!
<%=== ... %>
<%==== ... %>
[%= %]
<%% ... %>
<%%= ... %>
<!--% ... %-->
<?rb ... ?>
@{...}@
@!{...}@
@!!{...}@
Tài liệu tham khảo
All rights reserved