Bạn có thể đặt logic tùy chỉnh trong routes.rb không?Đường ray tuyến tính logic
Ví dụ:
unless current_user
root :to => anonymous_page
else
root :to => logged_in_page
end
Bạn có thể đặt logic tùy chỉnh trong routes.rb không?Đường ray tuyến tính logic
Ví dụ:
unless current_user
root :to => anonymous_page
else
root :to => logged_in_page
end
Bạn có thể đặt logic tùy chỉnh thành các tuyến ... nhưng như avenger đề xuất - "current_user" sẽ không hoạt động do khi tệp tuyến đường được tải. Đôi khi chúng tôi sử dụng logic trong định tuyến của chúng tôi (ví dụ: thiết lập các tuyến đường chỉ khả dụng nếu RAILS_ENV == 'phát triển').
Những gì bạn có thể muốn là một before_filter vào "anonymous_page" ví dụ:
before_filter :redirect_if_logged_in, :only => :anonymous_page
def redirect_if_logged_in
redirect_to logged_in_page if current_user.present?
end
Điều đó không làm việc như thế. Các tuyến đường được đọc/tạo khi khởi động máy chủ, không phải theo yêu cầu. Logic như vậy bạn phải đưa vào bộ điều khiển.
Bạn có thể sử dụng đá quý giải phóng mặt bằng để làm những gì bạn đang suy nghĩ. Từ tài liệu giải phóng mặt bằng:
Blog::Application.routes.draw do
constraints Clearance::Constraints::SignedIn.new { |user| user.admin? } do
root to: 'admin'
end
constraints Clearance::Constraints::SignedIn.new do
root to: 'dashboard'
end
constraints Clearance::Constraints::SignedOut.new do
root to: 'marketing'
end
end
Điều này làm việc vì việc giải phóng mặt bằng tự thêm vào ngăn xếp trung gian, làm cho trạng thái đăng nhập khả dụng trước khi các tuyến đường được xử lý.
Lưu ý: điều đó tạo ra điều gì đó để làm cho phép thuật xảy ra ở đây: https://github.com/plataformatec/devise/wiki/How-To:-Define-a-different-root-route-for-logged-in- người dùng ngoài – Jonathan