例外処理
例外、例外処理
例外とは、事前に想定される、期待と違う挙動。想定されるエラー。(コーディングしてて出くわすエラーとは少し違う)
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か。
「途中まで処理ができて、例外以降の処理ができない」みたいな状態を避けれる。(商品の注文と支払いとか、セットじゃないと困るもの)