Tôi đang sử dụng Devise trong ứng dụng Rails 3, nhưng trong trường hợp này, người dùng hiện tại phải được tạo bởi người dùng hiện tại, người sẽ xác định những quyền mà anh ấy / cô ấy sẽ có.
Vì điều này, tôi muốn:
- Để xóa tuyến đường cho người dùng đăng ký .
- Để vẫn cho phép người dùng chỉnh sửa hồ sơ của họ (thay đổi địa chỉ email và mật khẩu) sau khi họ đã đăng ký
Tôi có thể làm cái này như thế nào?
Hiện tại, tôi đang loại bỏ tuyến đường này một cách hiệu quả bằng cách đặt các mục sau devise_for :users
:
match 'users/sign_up' => redirect('/404.html')
Điều đó hiệu quả, nhưng tôi tưởng tượng có một cách tốt hơn, phải không?
Cập nhật
Như Benoit Garret đã nói, giải pháp tốt nhất trong trường hợp của tôi là bỏ qua việc tạo các tuyến đăng ký và chỉ tạo những thứ tôi thực sự muốn.
Để làm điều đó, trước tiên tôi chạy rake routes
, sau đó sử dụng đầu ra để tạo lại những cái tôi muốn. Kết quả cuối cùng là thế này:
devise_for :users, :skip => [:registrations]
as :user do
get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
put 'users' => 'devise/registrations#update', :as => 'user_registration'
end
Lưu ý rằng:
- Tôi vẫn còn
:registerable
trongUser
mô hình của tôi devise/registrations
xử lý cập nhật email và mật khẩu- Cập nhật các thuộc tính người dùng khác - quyền, v.v. - được xử lý bởi một bộ điều khiển khác
Câu trả lời thực tế:
Xóa tuyến đường cho các đường dẫn Devise mặc định; I E:
devise_for :users, path_names: {
sign_up: ''
}
https://example.com/users/
. Xem câu trả lời của tôi dưới đây.