ほげほげパッチ

有る事無い事 徒然なるままに

例外処理

例外、例外処理

例外とは、事前に想定される、期待と違う挙動。想定されるエラー。(コーディングしてて出くわすエラーとは少し違う)

Exceptionクラスを承継したNoMethodErrorとかSyntaxError。

activerecord-import (Gem)

importメソッドが使えるようになる。

配列 -> import -> 一気にレコード作成

データベースにアクセスする回数を減らせる。

(db/seeds.rb)
users = []
10000.times do |i|
 # usersに10000件新規ユーザーの情報を格納する
  users << User.new(name: "dummy-#{i+1}", ticket_count: 0)
end
# importメソッドの引数に配列を渡して、まとめてレコードを作成する
User.import users


reils db:seed

db/seeds.rbに基づいてレコードを作成

Rakeレイクタスク

タスクを実行するためのツール。タスク = コマンド?

(ターミナル)
# タスクファイル作成
% rails g task タスクファイル名
(lib/tasks/タスクファイル名.rake)
namespace :ここにグループ名を記述する do
  desc "ここに処理の説明を記述する"
  task タスク名: :environment do

         ここに実際のタスクを記述する

  end
end
# 実行コマンド
rails namespaceの名前:taskの名前


environmentエンバイロメントメソッド

タスクの処理をアプリケーション(Rails環境に依存させる。

Rails上のUserモデルとかを扱えるようになる。

incrementインクリメントメソッド

User.find_each do |user|
  # tichket_countカラムの値を10増やす
  user.increment!(:ticket_count, 10)
end


beginビギン

例外処理を想定している箇所を囲う

rescueレスキュー

例外が起きたら実行される

繰り返し処理(each,time,while)の中に begin,rescueを書くとループが途中で止まらない。

    User.find_each do |user|
      begin
        user.increment!(:ticket_count, 10)
      rescue => e #発生した例外を変数eに格納
        # エラーをログに記録
        Rails.logger.debug e.message
      end
    end


例外を発生させる !

save, create, destroy => true/false

save!, create!, destroy! => falseじゃなく例外

raiseレイズ

自分で例外を発生させて「不具合の原因となる箇所で例外を明示して、処理を止めたいとき」

raise 発生させたい例外クラス, 'エラーメッセージ'

例外クラス・・・NoMethodError, RuntimeError, SyntaxError, NameErrorなど

トランザクション transaction: 処理

個別に処理ではなく、一気に処理。 100か0か。

「途中まで処理ができて、例外以降の処理ができない」みたいな状態を避けれる。(商品の注文と支払いとか、セットじゃないと困るもの)