自定义设计控制器不工作

我有两个模型常驻和用户。 它们都包含roll_number属性,我现在已经在驻留模型中输入了数据,当用户注册它是Devise资源时它检查驻留模型中是否存在相同的roll_number? 然后用户可以注册!! 所以基本上我将属性(roll_number)添加到Devise的用户模型,然后我编辑了注册控制器的Create方法,这里的代码是:

class Users::RegistrationsController < Devise::RegistrationsController before_action :configure_sign_up_params, only: [:create] before_action :configure_account_update_params, only: [:update] # GET /resource/sign_up # def new # super # end def create super resident = Resident.find_by(roll_number: params[:roll_number]) if resident.present? @user = resident.create_user(params) if @user.save flash[:info] = "Welcome to messpay" redirect_to root_url else render 'new' end else flash[:danger] = "You have entered a worng Roll number or you are not a Resident" redirect_to new_user_registration end end # GET /resource/edit # def edit # super # end # PUT /resource # def update # super # end # DELETE /resource # def destroy # super # end # GET /resource/cancel # Forces the session data which is usually expired after sign # in to be expired now. This is useful if the user wants to # cancel oauth signing in/up in the middle of the process, # removing all OAuth session data. # def cancel # super # end # protected def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:roll_number,:resident_id]) 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: [:roll_number,:resident_id]) end # The path used after sign up. # def after_sign_up_path_for(resource) # super(resource) # end # The path used after sign up for inactive accounts. # def after_inactive_sign_up_path_for(resource) # super(resource) # end end 

但是这段代码不起作用,当我感觉到这种forms时,我得到了这个: 在此处输入图像描述

这是我的表单代码:

  

Create an account

Messpay account

Already have Messpay account Login here !!

我正在使用Params吗? 我无法理解为什么会发生这种情况!

我认为你应该把以下代码放在appliction_controller.rb

 before_action(:configure_permitted_parameters, if: :devise_controller?) def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) << [:roll_number,:resident_id]] devise_parameter_sanitizer.for(:account_update) << [:roll_number,:resident_id]] end 

希望对你有帮助