# app/controllers/devise_controller.rb
class DeviseController < ApplicationController
%w[resource resource_name signed_in_resource resource_class resource_params].each do |method_name|
new_method_name = method_name.sub(/resource/, 'user')
alias_method new_method_name, method_name
helper_method(new_method_name) if respond_to?(:helper_method)
end
end
2条答案
按热度按时间r8xiu3jd1#
YAGNI
resource_name
和resource_class
方法存在的唯一原因是Devise不对其验证的类的名称进行任何假设。类名是从路由派生的-这称为设备Map。如果你想打破这种抽象,让你的代码只为一个类工作,只需要显式引用类
User
。将方法别名化为user_name
和user_class
除了增加额外的间接层和许多潜在的混淆/错误之外,没有做任何事情。如果你想给
resource
取别名,那就继续吧--但这有点无意义,因为它只在Devise控制器/视图中使用,并且需要你不必要地重写生成的代码,如果你想把它提取到库中,这会让你的代码变得不那么有用。2o7dmzc52#
设备中有此文件
https://github.com/heartcombo/devise/blob/main/app/controllers/devise_controller.rb
你可以用猴子修补它
之后,您可以使用新的别名,例如: