12/08/2018, 14:18

Refactor ruby on rails

Refactoring là hành động thay đổi mã của ứng dụng nhưng không làm thay đổi hành vi thay vì nâng cao chất lượng của ứng dụng. Việc này được dùng để cải thiện khả năng đọc, giảm độ phức tạp, tăng khả năng bảo trì và mở rộng trong tương lai của hệ thống. Nói nôm na là viết code cho dễ hiểu, chạy ...

Refactoring là hành động thay đổi mã của ứng dụng nhưng không làm thay đổi hành vi thay vì nâng cao chất lượng của ứng dụng. Việc này được dùng để cải thiện khả năng đọc, giảm độ phức tạp, tăng khả năng bảo trì và mở rộng trong tương lai của hệ thống.

Nói nôm na là viết code cho dễ hiểu, chạy nhanh, tránh để bị ăn chửi khi thằng khác đọc code của mình.!

Hoặc đơn giản hơn là tìm được đoạn code cần sửa 1 cách dễ dàng khi maintain hay fix bug.

Trong bài viết buộc phải sử dụng dấu () bao ngoài dấu (@) vì viblo nhận diện (@) là tag.

Refactor view

1. Render partial, render collection

  • Để đảm bảo tính DRY (Don't repeat yourself) những đoạn code dùng chung nên đưa vào render partial
<h1>Listing Books</h1>
<table>
  <tr>
    <th>Title</th>
    <th>Summary</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
<% (@books).each do |book| %>
  <tr>
    <td><%= book.title %></td>
    <td><%= book.content %></td>
    <td><%= link_to "Show", book %></td>
    <td><%= link_to "Edit", edit_book_path(book) %></td>
    <td><%= link_to "Remove", book, method: :delete, data: { confirm: "Are you sure?" } %></td>
  </tr>
<% end %>
</table>
<br>
<%= link_to "New book", new_book_path %>

refactor:

<h1>Listing Books</h1>
<table>
  <tr>
    <th>Title</th>
    <th>Summary</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
  <%= render partial: "book", collection: (@books), as: :book %>
</table>
<br>
<%= link_to "New book", new_book_path %>

_book.html.erb

  <tr>
    <td><%= book.title %></td>
    <td><%= book.content %></td>
    <td><%= link_to "Show", book %></td>
    <td><%= link_to "Edit", edit_book_path(book) %></td>
    <td><%= link_to "Remove", book, method: :delete, data: { confirm: "Are you sure?" } %></td>
  </tr>
  • Không nên gọi đến 1 partial của 1 controller khác. (Vì mỗi partial chỉ dùng ở 1 controller nên partial thường đặt trong thư mục view của controller hiện tại, nếu dùng nhiều lần thì đưa vào shared)

  • Không nên sử dụng biến instance trong partial (vì partial sẽ được gọi ở nhiều nơi, nên các biến trong partial nên được truyền từ bên ngoài vào.

  • Sử dụng localassigns, content_for và yield, tại bài viết này.

  • Các bạn có thể tham khảo thêm ở đây

    http://guides.rubyonrails.org/layouts_and_rendering.html

    http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html

    https://richonrails.com/articles/partials-in-ruby-on-rails

2. Code trong view nên đơn giải hết mức có thể, vì code html đã đủ rối mắt lắm rồi             </div>
            
            <div class=

0