【发布时间】: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