Deviseでログイン機能を作成しました。
実現したいこととしては、ユーザーの新規登録時に、予めuserテーブルに新規追加しておいたaccountnameカラムにランダムな値を生成して、保存したいです。
従来であればDeviseでカラム追加した場合には、新規登録時のviewファイルに、<%= f.text_field :accountname%>のような形で書き、application_controller.rbにカラム追加の処理を書けばうまく行きますが、
今回のケースでは直接コントローラー側のcreateアクションでランダムな文字列を生成して、saveしたいです。
registrations_controllerを編集して値が保存されるか試してみたところ、値が保存されませんでした。
どのようにすればregistrations_controllerを編集できるようになりますでしょうか。
関係ありそうな記述を下記に記載します。何卒よろしくお願いいたします。
# frozen_string_literal: true 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 # POST /resource def create super @user = User.new(configure_sign_up_params) @user.accountname = "testname" @user.save 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 # If you have extra params to permit, append them to the sanitizer. def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:accountname]) 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: [:attribute]) # 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
## applicationController.rb class ApplicationController < ActionController::Base protect_from_forgery with: :exception # before_action :configure_permitted_parameters, if: :devise_controller? def after_sign_out_path_for(resource) "/users/logout" end protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:accountname]) end end
補足: 下記の記述でも試してみましたが、うまく行きませんでした...。
def create super User.create(accountname: "testname") end
回答3件
あなたの回答
tips
プレビュー