Ruby on Rails チュートリアル(第4版)　第2章

`$ heroku create`でbash: heroku: command not foundと出たので1章を見ながらherokuをインストール。

##2.2.1　演習
1.CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
　`<p id="notice">User was successfully created.</p>`
　リロードすると消える。`<p id="notice"></p>`

2.emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
　emailの入力なしでもユーザー登録が出来る。

3.「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?
　間違ったメールアドレスを入力しても更新出来る。

4.上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?
　`User was successfully destroyed.`


##2.2.2　演習
1.図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。
![rails.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662784/271bd815-4027-9813-c23a-ea0dc691979e.png)

2.図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。

```
    def set_user
      @user = User.find(params[:id])
    end
```
3.ユーザーの情報を編集するページのファイル名は何でしょうか?
　`app/views/users/edit.html.erb`

##2.3.1　演習
1.CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
　`<p id="notice">Micropost was successfully created.</p>`
　リロードすると消える。`<p id="notice"></p>`

2.マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?
　Content、Userが空でも作成できる。

3.141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaのRubyの記事にある１段落目がちょうど150文字程度ですが、どうなりますか?)
 141文字以上でも作成できる。

4.上記の演習で作成したマイクロポストを削除してみましょう。
　削除するだけ

##2.3.2　演習
1.先ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?
　エラーが出るようになった

```
1 error prohibited this micropost from being saved:
Content is too long (maximum is 140 characters)
```

2.CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。

```
<div id="error_explanation">
 <h2>1 error prohibited this micropost from being saved:</h2>
 <ul>
   <li>Content is too long (maximum is 140 characters)</li>
 </ul>
</div>
```

##2.3.3　演習
1.ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。

```ruby:app/views/users/show.html.erb
<p>
  <strong>Micropost:</strong>
  <%= @user.microposts.first.content %>
</p>
```
2.リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。
　エラーが出るようになった

```
1 error prohibited this micropost from being saved:
Content can't be blank
```

3.リスト 2.17のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください (図 2.17)。

```ruby:app/models/user.rb
class User < ApplicationRecord
  has_many :microposts
  validates :name, presence: true
  validates :email, presence: true
end
```

##2.3.4　演習
1.Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。

```ruby:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
```

2.ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)

```ruby:app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
```

##2.3.5　演習
 省略

##メモ
validatesとかの設定は`app/models`で行う。
本番環境のデータベースのマイグレーションが必要。

```
$ heroku run rails db:migrate

```