2012-11-06 27 views
6

Tôi đã tạo ra một mô hình người dùng. Có 2 loại người dùng:Thiết lập đường dẫn gốc khác nhau cho mỗi loại người dùng

  • khách hàng
  • quản trị

Tôi đã hoàn thành bij tạo hai mô hình 'bình thường': khách hàng và admin. Hai mô hình này được kế thừa từ mô hình người dùng, như vậy:

class Customer < User 

Có ai biết cách tôi có thể thiết lập đường dẫn gốc cho mỗi loại người dùng không. Tôi muốn một cái gì đó như thế này:

authenticated :customer do 
    root :to => "customer/dashboard#index" 
end 

authenticated :admin do 
    root :to => "admin/dashboard#index" 
end  

UPDATE:

Tôi đã giải quyết vấn đề:

root :to => "pages#home", :constraints => lambda { |request|!request.env['warden'].user} 
root :to => 'customer/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'customer' } 
root :to => 'admin/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'admin' } 
+0

Vui lòng chuyển câu trả lời được cập nhật của bạn ra ngoài câu hỏi của bạn và thay vào đó là câu trả lời. – Noz

+0

Tôi không thể trả lời câu hỏi của riêng mình trong 8 giờ đầu tiên ... –

Trả lời

2

gì bạn có thể làm là có một đường dẫn gốc duy nhất, giả home#index và trong tương ứng hành động điều khiển thực hiện chuyển hướng tùy thuộc vào loại người dùng của họ.

Ví dụ:

def index 
    if signed_in? 
    if current_user.is_a_customer? 
     #redirect to customer root 
    elsif current_user.is_a_admin? 
     #redirect to admin root 
    end 
    end 
end 
+0

Cảm ơn câu trả lời của bạn. 1 vấn đề với cách tiếp cận của bạn: gốc của khách hàng và gốc quản trị không ở tại domain.com/. Nó sẽ trở thành một cái gì đó như domain.com/customer và domain.com/admin –

+0

trong trường hợp đó, bạn cần phải di chuyển các điều kiện này (is_a_customer? Và is_a_admin?) Vào phương pháp gốc của bạn (phương pháp phổ biến mà bạn yêu cầu khởi kiện cho cả hai loại người dùng)) và tìm nạp bản ghi theo người dùng đã đăng nhập – Prem

5

mặc dù một câu hỏi cũ, không có câu trả lời và nó có thể hữu ích cho người khác.

Trong ray 3.2 (Tôi chưa bao giờ thử nghiệm nó với bất cứ điều gì thấp hơn), bạn có thể làm điều này trong tập tin routes.rb của bạn

authenticated :admin_user do 
    root :to => "admin_main#index" 
end 

sau đó có tuyến đường gốc bình thường của bạn tiếp tục xuống.

Tuy nhiên, dường như không hoạt động trong đường ray 4 vì nó cung cấp Invalid route name, already in use: 'root' (ArgumentError) (như tôi vừa phát hiện ra và đang tìm kiếm giải pháp khi tôi gặp câu hỏi này), nếu tôi tìm ra cách làm trong đường ray 4 tôi sẽ cập nhật câu trả lời của tôi

Edit:

Ok như vậy cho đường ray 4 việc sửa chữa là khá đơn giản nhưng không phải như vậy rõ ràng ngay lập tức. tất cả các bạn cần làm là làm cho con đường gốc thứ hai một tuyến đường được đặt tên bằng cách thêm một như: như thế này:

authenticated :admin_user do 
    root :to => "admin_main#index", as: :admin_root 
end 

này được ghi chép lại here nhưng lưu ý rằng nó có vẻ như chỉ là một sửa chữa tạm thời và do đó có thể thay đổi một lần nữa trong tương lai

+0

không hoạt động trong đường ray 5 nữa :( – wegginho

0

Sử dụng after_sign_in_path_for phải phù hợp. Vì vậy, hãy thêm số này vào số application_controller.rb:

def after_sign_in_path_for(resource) 
    if resource.type == 'customer' 
    your_desired_customer_path 
    else 
    your_desired_admin_path 
    end 
end 
Các vấn đề liên quan