具有设计和命名空间资源的意外的edit_password_url值

时间:2018-10-20 15:36:36

标签: ruby-on-rails devise ruby-on-rails-5 devise-recoverable

我刚进入一个新项目,当前的Devise配置让我头疼。实际上,除了edit_password_url视图中出现的reset_password_instructions.html以外,一切都按预期工作。

关于型号:

class User < ApplicationRecord
  devise :confirmable, :database_authenticatable, :invitable,
    :recoverable, :registerable, :rememberable, :trackable, :validatable


class Renter < ApplicationRecord
  belongs_to :user

class Landlord < ApplicationRecord
  belongs_to :user

关于路线:

namespace :landlord do
  devise_for :users, controllers: {
      confirmations: 'landlord/users/confirmations',
      passwords: 'landlord/users/passwords',
      registrations: 'landlord/users/registrations',
      sessions: 'landlord/users/sessions',
      invitations: 'devise/invitations'
  }

  authenticate :landlord_user do
    ...
  end
end

namespace :renter do
  devise_for :users, controllers: {
      confirmations: 'renter/users/confirmations',
      passwords: 'renter/users/passwords',
      registrations: 'renter/users/registrations',
      sessions: 'renter/users/sessions',
      invitations: 'renter/users/invitations'
  }

  authenticate :renter_user do
    ...
  end
end

问题是,如果我要求从租用者空间重置密码,则邮件中的edit_password_url valuelandlord/users/password/edit?reset_password_token=X

如果我向房东询问,我的期望值为landlord/users/password/edit?reset_password_token=X

有趣的是,如果我通过更改命名空间声明的顺序(首先是routes.rb来更改namespace :renter,则edit_password_url的值现在为renter/users/password/edit?reset_password_token=X,即使从楼主的空间...

我敢肯定,这与路由问题比与Devise“ bug”更相关,但是,我仍然不知道如何直接触摸gem来解决此问题。

0 个答案:

没有答案