Как изменить логин и URL-адреса регистрации в разработке плагина Rails3
Я использую плагин устройства в своем новом приложении Rails 3. Моя проблема заключается в том, что плагин имеет корни по умолчанию для входа и регистрации
/users/sign_in
/users/sign_up
Мне нужно изменить это на
/login
/signup
Для этого я использовал следующую маршрутизацию
devise_for :users do
get "login", :to => "devise/sessions#new"
get "signup", :to => "devise/registrations#new"
end
С этим мне нужно указать "login_path" и "signup_path" каждый раз, когда в моих представлениях появляется путь new_user_session_path и new_user_registration_path
То, что я хочу, - это конфигурация в маршрутах, которая отображает "/login" и "/signup" на new_user_session_path и new_user_registration_path.
Я видел сообщение, которое указывает маршрут /users/sign _in и/users/sign_up на /sign _in и/sign_up, используя приведенную ниже маршрутизацию.
devise_for :user, :as => ''
Мне нужен какой-то метод маршрутизации, такой как route/users/sign_in и /users/sign _up to/login и /signup.
Может ли кто-нибудь помочь мне в этом.
UPDATE: я изменил файл routes.rb на
devise_for :users,
:controllers => { :sessions => 'devise/sessions'},
:skip => [:sessions] do
get '/login' => "devise/sessions#new", :as => :new_user_session
post '/login' => 'devise/sessions#create', :as => :user_session
get '/signout' => 'devise/sessions#destroy', :as => :destroy_user_session
get '/signup' => 'devise/registrations#new', :as => :new_user_registration
end
Но все же, когда я использую link_to 'new_user_registration' в своих представлениях, он не отображается как '/signup' в браузере
Ответы
Ответ 1
Вот несколько вариантов, чем вы просили, но ясно:
devise_for :users,
:controllers => { :registrations => "users/registrations",
:confirmations => "users/confirmations",
:sessions => 'devise/sessions'},
:skip => [:sessions] do
get '/signin' => "devise/sessions#new", :as => :new_user_session
post '/signin' => 'devise/sessions#create', :as => :user_session
get '/signout' => 'devise/sessions#destroy', :as => :destroy_user_session
get "/signup" => "users/registrations#new", :as => :new_user_registration
end
Более того, с помощью :registrations => "users/registrations"
мы можем дополнительно настроить перенаправления:
class Users::RegistrationsController < Devise::RegistrationsController
protected
def after_sign_up_path_for(resource)
welcome_path # it not a home path
end
def after_update_path_for(resource)
edit_user_registration_path
end
end
У разработчика есть хороший wiki.
Ответ 2
Мне удалось исправить мою проблему, используя следующий код в моих маршрутах
devise_for :users,
:controllers => { :sessions => 'devise/sessions'},
:skip => [:sessions] do
get '/login' => "devise/sessions#new", :as => :new_user_session
post '/login' => 'devise/sessions#create', :as => :user_session
get '/signout' => 'devise/sessions#destroy', :as => :destroy_user_session
get "/signup" => "devise/registrations#new", :as => :new_user_registration
end
Но все же в моих представлениях, если я использую
link_to "Register", new_user_registration_path
В моем браузере его отображение
/user/sign_up and not as /signup
Но если я непосредственно набираю/регистрируюсь, я получу страницу регистрации. Есть ли какое-либо отображение, которое мне нужно сделать здесь.
Ответ 3
Надеюсь, я не слишком поздно;)
вот как это работает (просто вставьте его в свои маршруты .rb, и вы хорошо пойдете):
devise_for :users, :controllers => {:sessions => 'devise/sessions'}, :skip => [:sessions] do
get 'login' => 'devise/sessions#new', :as => :new_user_session
post 'login' => 'devise/sessions#create', :as => :user_session
get 'logout' => 'devise/sessions#destroy', :as => :destroy_user_session
get 'register' => 'devise/registrations#new', :as => :new_user_registration
end
Ответ 4
изменить config/routes.rb
devise_for: users, path: ''
devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout', password: 'secret', confirmation: 'verification', unlock: 'unblock', registration: 'register', sign_up: 'cmon_let_me_in' }
new_user_session GET /login(.:format) devise/sessions#new
user_session POST /login(.:format) devise/sessions#create
destroy_user_session DELETE /logout(.:format) devise/sessions#destroy
user_password POST /secret(.:format) devise/passwords#create
new_user_password GET /secret/new(.:format) devise/passwords#new
edit_user_password GET /secret/edit(.:format) devise/passwords#edit
PATCH /secret(.:format) devise/passwords#update
PUT /secret(.:format) devise/passwords#update
cancel_user_registration GET /register/cancel(.:format) devise/registrations#cancel
user_registration POST /register(.:format) devise/registrations#create
new_user_registration GET /register/cmon_let_me_in(.:format) devise/registrations#new
edit_user_registration GET /register/edit(.:format) devise/registrations#edit
PATCH /register(.:format) devise/registrations#update
PUT /register(.:format) devise/registrations#update
DELETE /register(.:format) devise/registrations#destroy
Ответ 5
Если я правильно читаю и правильно понимаю ваш вопрос, вы после "соответствия".
devise_for :users
match "/login" => "devise/sessions#new"
match "/signup" => "devise/registrations#new"
Обязательно установите их в правильном порядке, поскольку они сопоставляются на основе номеров строк в файле.
Подробнее можно найти по адресу: http://guides.rubyonrails.org/routing.html