【问题标题】:Rails Devise, extra params don't work in RegistrationsControllerRails 设计,额外的参数在 RegistrationsController 中不起作用
【发布时间】:2022-09-27 15:36:27
【问题描述】:

我在将用户名添加到设计控制器时遇到问题。 创建新用户时我在控制台中收到的错误消息是:\"Unpermitted parameter: :username.\"

但是,我正在关注 github 上的文档,该文档说我应该添加如下参数:

在registrations_controller.rb(这不起作用)

    class Users::RegistrationsController < Devise::RegistrationsController
    before_action :configure_sign_up_params, only: [:create]
    before_action :configure_account_update_params, only: [:update]

    protected

    #If you have extra params to permit, append them to the sanitizer.
    def configure_sign_up_params
        devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
    end
    
    #If you have extra params to permit, append them to the sanitizer.
    def configure_account_update_params
        devise_parameter_sanitizer.permit(:account_update, keys: [:username])
    end
end

然而,在应用程序控制中这样做是可行的:

class ApplicationController < ActionController::Base
    before_action :configure_permitted_parameters, if: :devise_controller?

    protected

    def configure_permitted_parameters
        added_attrs = [:username]
        devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
        devise_parameter_sanitizer.permit :account_update, keys: added_attrs
    end
end

我不明白一个如何工作而另一个不明白。

  • 您是否配置了路由以使用您的自定义控制器?例如devise_for :users, controllers: { registrations: \"users/registrations\" }?我真的不明白为什么你会像第一个例子一样创建两个不同的回调方法来使这个过于复杂化。
  • 后者起作用的原因是 DeviseController 继承自 ApplicationController。
  • @max 在我已经添加的路由中:devise_for :users, controllers: { sessions: \'users/sessions\' } 但我知道我也应该添加注册,我会尝试一下!过度复杂的是文档的显示方式,并且该文件是由设计自动生成的,并且这些已被注释掉。所以我认为当我像文档所说的那样添加它时它不起作用很奇怪。
  • @max 就像你说的那样走错了路!谢谢,如果您添加是作为答案,我会接受! :)

标签: ruby-on-rails devise ruby-on-rails-7


【解决方案1】:

您需要配置路由以使用您的自定义控制器

devise_for :users, controllers: { 
  # ...
  registrations: "users/registrations" 
}

您也不需要两个单独的回调,因为devise_parameter_sanitizer 为不同的操作保留了不同的参数列表。

module Users
  class RegistrationsController < Devise::RegistrationsController
    before_action :configure_permitted_parameters

    protected
    def configure_permitted_parameters
        added_attrs = [:username]
        devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
        devise_parameter_sanitizer.permit :account_update, keys: added_attrs
    end
  end
end

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 2012-06-10
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    相关资源
    最近更新 更多