Ruby on rails 如何在Desive plugin Rails中更改登录和注册URL

Ruby on rails 如何在Desive plugin Rails中更改登录和注册URL,ruby-on-rails,devise,Ruby On Rails,Devise,我正在我的新Rails应用程序中使用Desive插件。我的问题是Desive插件有默认的登录和注册根 /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

我正在我的新Rails应用程序中使用Desive插件。我的问题是Desive插件有默认的登录和注册根

/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”和“/signup”映射到新用户会话路径和新用户注册路径

我看到一篇帖子,其中使用下面显示的路由路由/users/sign_in和/users/sign_up to/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

但是,当我在视图中使用指向“新用户注册”的链接时,它在浏览器中不会显示为“/signup”

这里的选项比您要求的要多一些,但很明显:

  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
类用户::注册控制器<设计::注册控制器
受保护的
注册后的def路径(资源)
欢迎来到这条路,这不是回家的路
结束
更新后的def路径(资源)
编辑用户注册路径
结束
结束

Deviate有一个很好的答案。

如果我正确地阅读并理解了你的问题,那么你就是在“匹配”

devise_for :users match "/login" => "devise/sessions#new" match "/signup" => "devise/registrations#new" 为:用户设计 匹配“/登录”=>“设计/会话#新建” 匹配“/注册”=>“设计/注册#新” 确保它们的顺序正确,因为它们是根据文件中的行号匹配的


更多信息请访问:

我可以通过在我的路线中使用以下代码来解决我的问题

  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
但是如果我直接输入/注册,我将获得注册页面。我需要在这里进行映射。

我希望不会太晚;)

下面是它的工作原理(只需将其粘贴到routes.rb中,您就可以开始了):

编辑config/routes.rb

为以下用户设计路径:路径:'

 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

由于这可能仍然是人们在寻找该问题时得到的n°1结果,因此有必要指出,现在有一种简单的方法可以做到这一点:

devise_for :users, path: '', path_names: { sign_in: 'login', sign_up: 'signup'}

参考资料:

谢谢你,伙计。我的工作很好。但是“/signup”没有映射到“新用户注册路径”。我在我的路线中添加了你的代码。我还需要添加什么吗?这是因为我有定制的注册控制器,正如我上面所示。这里是一个
get”/signup“=>“users/registrations#new”
的地方,您可以将
users
更改为
design
,并从
中删除
:registrations=>“users/registrations”
:contorllers
hash.designe\u for:users,:controllers=>:sessions=>“design/sessions”,:skip=>[:sessions]do get'/login'=>“设计/会话#新建”;:as=>:new_user_session post'/login'=>“设计/会话#创建”;:as=>:user_session get'/signout'=>“设计/会话#销毁”;:as=>:destroy_user_session get“/signup”=>“设计/注册#新建”,:as=>:new_user_registration end但是当我在我的视图中使用“new_user_registration”的链接时,它不会显示为“/signup”Hi Voldy你能看看我的答案并找出问题所在吗?你能确定你当前的路线吗(设计部分)作为您问题的更新?使用此路由,我需要在我的视图中指定“/login”和“/signup”。因此,单击此链接将进入登录和注册页面。我所看到的是Desive插件有一个指向注册页面的链接。单击此链接,浏览器中的url必须为“/signup”。使用Desive默认路由,链接类似于“/use”注册。希望你明白我的问题。请帮忙
devise_for :users, path: '', path_names: { sign_in: 'login', sign_up: 'signup'}