Sử dụng function try trong Rails
Trong quá trình làm việc với Rails, có nhiều hàm khá hữu ích, giúp code gọn gàng và dễ hiểu hơn nhưng chúng ta ít khi dùng đến, hôm nay mình xin giới thiệu cùng các bạn một hàm như thế, đó là hàm try(). Try là một hàm của Rails cho phép chúng ta gọi thử một hàm từ một object mà không cần lo rằng ...
Trong quá trình làm việc với Rails, có nhiều hàm khá hữu ích, giúp code gọn gàng và dễ hiểu hơn nhưng chúng ta ít khi dùng đến, hôm nay mình xin giới thiệu cùng các bạn một hàm như thế, đó là hàm try().
Try là một hàm của Rails cho phép chúng ta gọi thử một hàm từ một object mà không cần lo rằng object đó đang có giá trị nil và sẽ gây ra exception. Sử dụng try() một cách hợp lý trong một số trường hợp là tốt, nhưng nếu lạm dụng try, chúng ta cũng có thể gặp phải một số vấn đề không mong muốn.
I. Sử dụng try khi kết quả trả về có thể có hoặc không Giả sử chúng ta có một cơ sở dữ liệu với quan hệ như sau: Chúng ta có model Product, một product có thể có hoặc không có Manufacture, chúng ta cần hiển thị tên nhà sản xuất của sản phẩm và đường link chỉnh sửa thông tin sản phẩm nếu người dùng là admin, theo cách thông thường chúng ta code như sau:
<% unless @product.manufacturer.nil? %> <%= @product.manufacturer.name %> <% end %> <% if current_user && current_user.is_admin? %> <%= link_to 'Edit', edit_product_path(@product) %> <% end %>
Cách viết này đúng nhưng hơi dài dòng, nếu sử dụng hàm try() chúng ta có thể viết như sau:
<%= @product.manufacturer.try(:name) %> <% if current_user.try(:is_admin?) %> <%= link_to 'Edit', edit_product_path(@product) %> <% end %>
Cách viết này rõ ràng là ngắn gọn, chuyên nghiệp và dễ hiểu hơn cách viết trên đúng không