我在新的Rails 3 App中使用设备插件。我的问题是设计插件有登录和注册的默认根
/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 => ''
我需要一些这样的路由技术,将/ users / sign_in和/ users / sign_up路由到/ login和/ signup。
有人可以帮我解决这个问题。
更新:我已将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'
答案 0 :(得分:32)
这里的选项比你提出的要多一些,但很明显:
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's not a home path
end
def after_update_path_for(resource)
edit_user_registration_path
end
end
Devise有一个很好的wiki。
答案 1 :(得分:3)
我能够通过在我的路线中使用以下代码来解决我的问题
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
但如果我直接输入/注册,我会收到注册页面。我需要在这里做任何映射。
答案 2 :(得分:2)
我希望我不会太迟;)
这是它的工作原理(只需将它粘贴在您的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 'logout' => 'devise/sessions#destroy', :as => :destroy_user_session
get 'register' => 'devise/registrations#new', :as => :new_user_registration
end
答案 3 :(得分:1)
编辑config / routes.rb
devise_for:用户,路径:''
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
答案 4 :(得分:1)
由于这可能仍然是人们寻找该问题时获得的n°1结果,因此可能有必要指出,现在有一种简单的方法可以做到这一点:
private static var _homeApiCalled = false
参考:https://github.com/heartcombo/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
答案 5 :(得分:0)
如果我正确地阅读并理解你的问题,那么你就是在'匹配'之后。
devise_for :users match "/login" => "devise/sessions#new" match "/signup" => "devise/registrations#new"
请确保按正确顺序排列它们,因为它们根据文件中的行号进行匹配。
更多信息可在以下网址找到:http://guides.rubyonrails.org/routing.html