2011-09-16 5 views
7

Chúng tôi có một trang web nơi chúng tôi có giao diện quản lý phụ trợ và giao diện người dùng hiển thị thông tin của chúng tôi. Chúng tôi đang sử dụng Devise để bảo mật xác thực.Rails thực hành tốt nhất cho thiết lập hệ thống quản trị phụ trợ?

Phần phụ trợ nên cho phép chỉnh sửa loại CRUD bình thường đối với các đối tượng mô hình của chúng tôi. Các giao diện và bố cục cũng hoàn toàn khác với giao diện người dùng. Cách thực hành tốt nhất để thực hiện điều này trong Rails 3 là gì?

hai cách tiếp cận của chúng tôi là: nhà

  1. Admin xem thư mục tất cả xem mã cụ thể, cũng như một thư mục admin trong nhà folder controllers tất cả các bộ điều khiển kiểm soát truy cập cụ thể admin.
  2. Hệ thống logic có điều kiện với một bộ chế độ xem và bộ điều khiển, nếu có câu lệnh kiểm tra xem người dùng có đang ở chế độ quản trị hay không.

Được đề xuất nhiều hơn hoặc nếu có cách tiếp cận khác mà chúng tôi đã bỏ lỡ, vui lòng cho tôi biết.

Trả lời

15

Giải pháp đầu tiên tốt hơn, tuy nhiên đối với những trường hợp này đã được tạo namespaces và cách tốt nhất là đi với không gian tên khi bạn cần sự khác biệt có liên quan giữa trang web người dùng và khu vực quản trị. Đọc thêm về nó here

cấu trúc thư mục của bạn sẽ trông như thế này:

controllers/ 
    |--admin/ 
     |--posts_controller.rb 

Trong các tuyến đường của bạn, bạn đặt tất cả mọi thứ bạn cần vào namespace admin:

namespace :admin do 
    resources :posts, :comments 
end 

điều khiển của bạn nên có một thư mục admin và bộ điều khiển trong khu vực quản trị sẽ trông giống như:

class Admin::PostsController < ApplicationController 
end 

Bạn cũng nên có một thư mục admin trong quan điểm của bạn, nơi bạn đặt các quan điểm tương ứng:

views/ 
    |--admin/ 
     |--posts/ 
      |--index.html.erb 
      |--... 

Bạn cũng có thể không gian tên mô hình của bạn, nhưng nó phụ thuộc vào nhu cầu của bạn, nó là tốt khi bạn cần phải có khác nhau các mô hình có cùng tên. Ví dụ: nếu bạn cần bảng khác nhau cho người dùng quản trị và bảng khác nhau cho người dùng thông thường. Cá nhân tôi sẽ không sử dụng mô hình không gian tên, chỉ trong trường hợp rất hợp lý.

Tùy chọn thứ hai tôi nghĩ có thể gây ra nhiều đau đầu, bạn sẽ bị mất trong các câu lệnh if, tôi không khuyên bạn nên làm như vậy.