ruby-on-rails 如何更改默认的设备“资源”命名?

rqdpfwrv  于 2023-05-02  发布在  Ruby
关注(0)|答案(2)|浏览(182)

默认情况下,Devise指的是在控制器和视图中具有变量resourceresource_nameresource_class等的用户。
是否可以安全地更改此默认值,使Devise引用具有自定义名称e的用户。例如useruser_nameuser_class等。如果是这样,如何做到这一点?

r8xiu3jd

r8xiu3jd1#

YAGNI

resource_nameresource_class方法存在的唯一原因是Devise不对其验证的类的名称进行任何假设。类名是从路由派生的-这称为设备Map。
如果你想打破这种抽象,让你的代码只为一个类工作,只需要显式引用类User。将方法别名化为user_nameuser_class除了增加额外的间接层和许多潜在的混淆/错误之外,没有做任何事情。
如果你想给resource取别名,那就继续吧--但这有点无意义,因为它只在Devise控制器/视图中使用,并且需要你不必要地重写生成的代码,如果你想把它提取到库中,这会让你的代码变得不那么有用。

2o7dmzc5

2o7dmzc52#

设备中有此文件
https://github.com/heartcombo/devise/blob/main/app/controllers/devise_controller.rb
你可以用猴子修补它

# 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

之后,您可以使用新的别名,例如:

form_for(user, as: user_name, url: registration_path(user_name)

相关问题