model.save
の際になぜか TransactionがRollbackされ原因調査でハマったのでメモφ(..)
対処法
model.save!
で登録を行ってみる。
model.save
の返り値は、true/false
のため、どのようなエラーが発生しROLLBACKされているかはわからない。
しかし、model.save!
では、ActiveRecordの例外を返してくれるため、原因調査に役立つ。
実際の結果
[2] pry(#<MessagesController>)> @message.save (0.1ms) begin transaction Message Exists (0.3ms) SELECT 1 AS one FROM "messages" WHERE "messages"."body" = 'ああああ' LIMIT 1 Message Exists (0.2ms) SELECT 1 AS one FROM "messages" WHERE "messages"."conversation_id" = 1 LIMIT 1 Message Exists (0.2ms) SELECT 1 AS one FROM "messages" WHERE "messages"."user_id" = 2 LIMIT 1 (0.1ms) rollback transaction => false [3] pry(#<MessagesController>)> @message.save! (1.3ms) begin transaction Message Exists (0.8ms) SELECT 1 AS one FROM "messages" WHERE "messages"."body" = 'ああああ' LIMIT 1 Message Exists (0.3ms) SELECT 1 AS one FROM "messages" WHERE "messages"."conversation_id" = 1 LIMIT 1 Message Exists (0.4ms) SELECT 1 AS one FROM "messages" WHERE "messages"."user_id" = 2 LIMIT 1 (0.1ms) rollback transaction ActiveRecord::RecordInvalid: Validation failed: Conversation has already been taken, User has already been taken
こんな感じでエラーの原因を確認出来る。