前提
以下のコードでdeviseの各種コードを生成しました。
rails g devise:install rails g devise User rails g devise:controllers users
app/controllers/users/registrations_controller.rb
のcreateメソッドをオーバーライドし処理を追加しました。
railsを起動し、新規登録するとcreateメソッドに追加した処理が実行されます。
実現したいこと
rails consoleから
User.createを実行したときに、オーバーライドした処理が実行されません。
どういったメソッド?を実行すればよいのでしょうか。
user = User.create(email:"test@example.com", password:"test0101") user.id => 101
該当のソースコード
app/controllers/users/registrations_controller.rb
ruby
1class Users::RegistrationsController < Devise::RegistrationsController 2 # before_action :configure_sign_up_params, only: [:create] 3 # before_action :configure_account_update_params, only: [:update] 4 5 # GET /resource/sign_up 6 # def new 7 # super 8 # end 9 10 # POST /resource 11 def create 12 super {|user| 13 user.update(id: user.id*100) 14 } 15 end 16end
app/models/user.rb
ruby
1Class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6end
config/routes.rb
ruby
1Rails.application.routes.draw do 2 devise_for :users, :controllers => { 3 :registrations => 'users/registrations', 4 :sessions => 'users/sessions' 5 } 6end
補足情報(FW/ツールのバージョンなど)
ruby 2.5.3
Rails 5.2.8.1
2022/12/14 追記
integer型のカラム id100を追加
db/schema.rb
ruby
1ActiveRecord::Schema.define(version: 2022_12_14_000216) do 2 3 create_table "users", force: :cascade do |t| 4 t.string "email", default: "", null: false 5 t.string "encrypted_password", default: "", null: false 6 t.string "reset_password_token" 7 t.datetime "reset_password_sent_at" 8 t.datetime "remember_created_at" 9 t.datetime "created_at", null: false 10 t.datetime "updated_at", null: false 11 t.integer "id100" 12 t.index ["email"], name: "index_users_on_email", unique: true 13 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 14 end 15 16end
app/controllers/users/registrations_controller.rbを変更
ruby
1class Users::RegistrationsController < Devise::RegistrationsController 2 # before_action :configure_sign_up_params, only: [:create] 3 # before_action :configure_account_update_params, only: [:update] 4 5 # GET /resource/sign_up 6 # def new 7 # super 8 # end 9 10 # POST /resource 11 def create 12 super {|user| 13 user.update(id100: user.id*100) 14 } 15 end 16end
rails serverから新規登録を行うと、id100にuser.id*100の値が書き込まれる。
rails consoleで確認すると
user = User.find(102) user.id100 => 10200
rails consoleでcreateを実行すると、id100はnilとなる。
user = User.create(email:"test4@example.com", password:"test0101") user.id100 => nil

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/12/14 02:13
2022/12/14 02:17
2022/12/14 03:46