Sử dung gem cells trong rails
Trong ứng dụng rails để gộp và tái sử dụng view nhiều lần, chúng ta thường dùng Partial. Tuy nhiên, khi muốn gộp chung cả logic vào view để tạo một template dùng chung thì qủa thực rất phức tạp. cells sinh ra là để giúp chúng ta giải quyết vấn đề này. 1. Giới thiệu Gem cells cho phép ta đóng ...
Trong ứng dụng rails để gộp và tái sử dụng view nhiều lần, chúng ta thường dùng Partial. Tuy nhiên, khi muốn gộp chung cả logic vào view để tạo một template dùng chung thì qủa thực rất phức tạp.
cells sinh ra là để giúp chúng ta giải quyết vấn đề này.
1. Giới thiệu
Gem cells cho phép ta đóng gói view và controller.
Là một lớp Ruby cơ bản giúp render các template, với những view có logic phức tạp, thì cells sẽ giúp code trở nên dễ đọc và dễ dàng tái sử dụng. Ngoài ra, cells còn thích hợp với các mô hình OOP, đa hình, kế thừa, nesting...Có thể sử dụng rails helper để đóng gói JS, CSS, image, simple distribution sử dụng gem hoặc rails engines.
2. Cấu trúc file
Trong Rails, cells được đặt trong app/cell hay app/concepts. Với cấu trúc như sau:
app ├── cells │ ├── post_cell.rb │ ├── post │ │ ├── show.erb │ │ ├── list.erb ├── post.css
3. Cài đặt và sử dụng
-
Thêm vào Gemfile và chạy bundle install.
-
Hơn nữa, cells hỗ trợ nhiều template như: cells-erb, cells-hamlit, cells-haml, cells-slim. Và khi muốn sử dụng mẫu template nào, cần thêm nó vào gemfile.
//gemfile gem "cells" gem "cells-erb" //hoặc gem "cells-haml"...
- Khởi tạo cell bẳng lệnh sau:
rails g cell Post show // cấu trúc cell được tạo ra: create app/cells/post_cell.rb create app/cells/post/show.erb
cells được sử dụng khá đơn giản và dễ hiểu:
- Class:
class PostCell < Cell::ViewModel def show render //mặc định render ra view tương ứng. end end
Có thể thêm nhiều cell vào trong view bằng cách:
class PostCell < Cell::ViewModel def show render + render(:additional) end end
Ngoài ra, ta có thể nesting cells, tức là gọi cell trong cell:
class PostCell < Cell::ViewModel def show render + cell(:comment).() // cells/comment/show.erb end end
- View: show.erb or show.haml,... tương tự những partial khi dùng trong view.
- Render: Có nhiều cách để gọi lại cell ở views.
//render show.erb <%= cell(:post).(:show) %>
render với các action khác kèm theo params:
<%= cell(:post).(:index, author: "saru") %>
Tuy nhiên, gem cells khi dùng cũng còn một số hạn chế:
- Không sử dụng được lazy I18n trong cells, bắt buộc sử dụng là phải gọi đến đường dẫn tuyệt đối.
- helpers sao chép từ module đến view không tồn tại trong cells. Khi muốn sử dụng thì cần phải include vào.
- Không render trên view được.
Như vậy, các bạn đã có một cái nhìn tổng quát về gem cells và cách sử dụng nó ở trong ứng dụng rails.