ruby-on-rails - 无法覆盖设计路线

标签 ruby-on-rails ruby devise routes rake

我正在使用 devise,我想自定义它的 url:

users/sign_in --> account/login
users/sign_up --> account/register
users/edit    --> account/profile
...

现在我的routes.rb看起来像这样:

  devise_scope :user do
    get '/account/login' => 'devise/sessions#new'
    post 'account/login' => 'devise/sessions#create', as: :user_session
    delete 'account/logout' => 'devise/sessions#destroy', as: :destroy_user_session

    post 'account/password' => 'devise/passwords#update', as: :user_password
    get 'account/password/forgot' => 'devise/passwords#new', as: :new_user_password
    get 'account/password/edit' => 'devise/passwords#edit', as: :edit_user_password
    put 'account/password' => 'devise/passwords#update'

    get 'account/cancel' => 'devise/registrations#cancel', as: :cancel_user_registration
    post 'account' => 'devise/registrations#create', as: :user_registration
    get 'account/register' => 'devise/registrations#new', as: :new_user_registration
    get 'account' => 'devise/registrations#edit', as: :edit_user_registration
    put 'account' => 'devise/registrations#edit'
    delete 'account' => 'devise/registrations#destroy'
  end
  devise_for :users

我设法覆盖个人资料,忘记,注册错误而不是登录:

因此,当我单击通用 Devise 登录表单中的“注册” 链接时,我会在浏览器中重定向到 /register ,但是当我单击“登录”链接 我仍然被重定向到 /users/sign_in 而不是 login

我尝试了 matchpost + get 的路线,但没有运气。我知道,如果我自己生成表单,我可以决定链接的外观,但我更喜欢使用通用设计表单,而且我很好奇为什么其他路由有效。

运行rake paths会产生以下结果(包含我的 route 的前五行):

        new_user_session GET    /account/login(.:format)           devise/sessions#new
            user_session POST   /account/login(.:format)           devise/sessions#create
    destroy_user_session DELETE /account/logout(.:format)          devise/sessions#destroy
           user_password POST   /account/password(.:format)        devise/passwords#update
       new_user_password GET    /account/password/forgot(.:format) devise/passwords#new
      edit_user_password GET    /account/password/edit(.:format)   devise/passwords#edit
        account_password PUT    /account/password(.:format)        devise/passwords#update
cancel_user_registration GET    /account/cancel(.:format)          devise/registrations#cancel
       user_registration POST   /account(.:format)                 devise/registrations#create
   new_user_registration GET    /account/register(.:format)        devise/registrations#new
  edit_user_registration GET    /account(.:format)                 devise/registrations#edit
                 account PUT    /account(.:format)                 devise/registrations#edit
                         DELETE /account(.:format)                 devise/registrations#destroy
        new_user_session GET    /users/sign_in(.:format)           devise/sessions#new
                         POST   /users/sign_in(.:format)           devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)          devise/sessions#destroy
                         POST   /users/password(.:format)          devise/passwords#create
                         GET    /users/password/new(.:format)      devise/passwords#new
                         GET    /users/password/edit(.:format)     devise/passwords#edit
                         PUT    /users/password(.:format)          devise/passwords#update
                         GET    /users/cancel(.:format)            devise/registrations#cancel
                         POST   /users(.:format)                   devise/registrations#create
                         GET    /users/sign_up(.:format)           devise/registrations#new
                         GET    /users/edit(.:format)              devise/registrations#edit
                         PUT    /users(.:format)                   devise/registrations#update
                         DELETE /users(.:format)                   devise/registrations#destroy
                root        /                                  posts#show

更新:我现在正在模仿所有设计的路线(请参阅更新的routes.rb)。但我仍然被重定向到 /users/sign_in

最佳答案

你可以试试这个,这很有效

查看更多帮助devise wiki

   devise_for :users, :path => '', :path_names => {:sign_in => 'login', :sign_out => 'logout'}

关于ruby-on-rails - 无法覆盖设计路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119157/

相关文章:

ruby-on-rails - 如何使我的网站由于图像而变快变慢

ruby-on-rails - 如何正确读取,更重要的是,如何写入 ruby​​ on rails 中的 3 表连接

ruby-on-rails - Ruby 数组创建,Array.new 与 []

ruby-on-rails - 如何使用Devise解决不同的用户类型

Mysql2::错误:无法连接到 '127.0.0.1' 上的 MySQL 服务器 (61)

ruby-on-rails - 只属于属于属于关联没有 has_many 或 has_one

ruby-on-rails - rails : Use a variable as a hash key

ruby-on-rails - 使用服务对象的 Pundit 授权

ruby-on-rails - 如何在 Rails API 中有效地使用 Devise 和 Doorkeeper?

ruby-on-rails - Devise + Facebook omniauth:无法为 Devise::OmniauthCallbacksController 找到操作 'facebook'