begin rescue 文

## find 
与えられたどのオプションにもマッチする```「主キー」に対応するオブジェクト```を取り出せます。
```
irb> customer = Customer.find(10)
```
カラム名をつけなくていい。

## find_by
与えられた条件にマッチするレコードのうち```最初のレコードだけ```を返します。
```
irb> Customer.find_by first_name: 'Lifo'
=> #<Customer id: 1, first_name: "Lifo">

irb> Customer.find_by first_name: 'Jon'
=> nil
```
カラム名をつける

```rb
irb(main):001:0> user = User.all
  TRANSACTION (0.1ms)  BEGIN
  User Load (0.4ms)  SELECT `users`.* FROM `users`
=>
[#<User:0x0000000112c78108
...

irb(main):002:0> post = Post.all
  Post Load (0.9ms)  SELECT `posts`.* FROM `posts`
=>
[#<Post:0x00000001129215e0
...

irb(main):003:0> post = Post.first
  Post Load (0.5ms)  SELECT `posts`.* FROM `posts` ORDER BY `posts`.`id` ASC LIMIT 1
=>
#<Post:0x00000001128806e0
...

irb(main):004:0> post.id
=> 3

irb(main):005:0> post = Post.find(id: 3)
  Post Load (0.3ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = NULL LIMIT 1
/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activerecord-7.0.2.3/lib/active_record/relation/finder_methods.rb:381:in `raise_record_not_found_exception!': Couldn't find Post with 'id'={:id=>3} (ActiveRecord::RecordNotFound)

irb(main):006:0> post = Post.find(id: "3")
  Post Load (0.4ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = NULL LIMIT 1
/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activerecord-7.0.2.3/lib/active_record/relation/finder_methods.rb:381:in `raise_record_not_found_exception!': Couldn't find Post with 'id'={:id=>"3"} (ActiveRecord::RecordNotFound)

irb(main):007:0> post = Post.find_by(id: 3)
  Post Load (0.6ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 3 LIMIT 1
=>
#<Post:0x000000011289a270
...

irb(main):008:0> post = Post.find_by(3)
/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activerecord-7.0.2.3/lib/active_record/relation/query_methods.rb:1298:in `build_where_clause': Unsupported argument type: 3 (Integer) (ArgumentError)

irb(main):009:0> post = Post.find_by("3")
  Post Load (0.7ms)  SELECT `posts`.* FROM `posts` WHERE (3) LIMIT 1
=>
#<Post:0x0000000112a920f0
...
```
## 思ったこと
愚かだな。
まだ勉強しよう。

# おかしな要求の場合に行う処理を実行する
## 例外
プログラム実行中に発生した```例外的な問題```のこと。
・エラーが起きてプログラムの実行を続けることができなくなった状態。
これをしておかないと
```プログラムが続行できない異常事態が起こる```ことを意図的に実行できる。

## NoMethodError in Posts#show
```
Showing /Users/*************/Repos/garden/app/views/posts/show.html.erb where line #12 raised:
undefined method `errors' for nil:NilClass
```

```
 Couldn't find Post with 'id'={:id=>"3"} (ActiveRecord::RecordNotFound)
```

```
'.freeze;     @post.errors.full_messages.each do |message| 
                   ^^^^^^^
```
@postがnilなのにも関わらずメソッドを呼ぼうとしていることにエラーが発生する。
```
Showing /Users/*************/Repos/garden/app/views/posts/show.html.erb where line #12 raised:
```
上が例外発生するまでの過程を表している。（下から上に並べている）
これを```バックトレース、スタックトレース(11章に続きがある。)```と呼ぶ。
12行目が例外が発生している。

rubyコマンドを実行した場合は例外が発生した時点で終了
（それ以降の処理は行われない。）

出典　プロを目指すRuby入門

## 例外を補足して処理を続行する場合
プログラムに例外処理を明示的に書くことでプログラムを続行させます。
```rb
begin
  # 例外が起きうる処理
rescue
  # 例外が発生した場合の処理
end
```
例外起きやすいコードを書いておく

```posts_controller.rb
  def show
    begin
      @post = Post.find(params[:id])
    rescue
      @error_message = "例外です。"
      redirect_to "/"
    end
  end
```