我刚进入一个新项目,当前的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 value
是landlord/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来解决此问题。