Rails クイズ: 次のコードで rollback されるのはどれでしょう?
先日、仕事のコードで遭遇して「なんだこの動き...」と思ったので、ブログに書いておく。
Rails クイズ: 次のコードで rollback されるのはどれでしょう?(配点10点)
常にバリデーションエラーになるモデル Bomb と no
属性によってコールバックを制御できる User クラスがあります。
# app/models/bomb.rb class Bomb < ApplicationRecord belongs_to :user validate -> { errors.add(:base, ':bomb:') } end # app/models/user.rb class User < ApplicationRecord has_many :bombs has_one :bomb attr_accessor :no before_validation -> { bombs.build }, if: -> { no.to_i == 1 } before_create -> { bombs.build }, if: -> { no.to_i == 2 } before_validation -> { build_bomb }, if: -> { no.to_i == 3 } before_create -> { build_bomb }, if: -> { no.to_i == 4 } end
このとき、下記の 1〜4 のコードの内で「 ロールバックされて、DBに保存されない 」のはどれでしょう? 全て挙げなさい。
User.new(no: 1).save! User.new(no: 2).save! User.new(no: 3).save! User.new(no: 4).save!
解答について
解答を書くと面白くないので、気になる人は試してみましょう!