【Railsチュートリアル】第6-10章　まとめ　

## 第6章
### データベースを変更しないようにコンソールを使う
```ruby:コンソール

rails console --sandbox

```

### オブジェクトが有効化を確認
```ruby:コンソール

>> user.valid?
true

```

### データベースにオブジェクトを保存
```ruby:コンソール

>> user.save

```

### オブジェクトの生成とデータベースへの保存
```ruby:コンソール

>> User.create(name: "A Nother", email: "another@example.org")

```

### データベースからの削除
```ruby:コンソール

>> foo.destroy

```

### idからデータを検索
```ruby:コンソール

>> User.find(1)

```

### 値からデータを検索
```ruby:コンソール

>> User.find_by(email: "michael@example.com")

```

### データベースの最初のデータを検索
```ruby:コンソール

>> User.first

```

### データベースの全てのデータを検索
```ruby:コンソール

>> User.all

```

### オブジェクトの再読み込み
```ruby:コンソール

>> user.email
=> "mhartl@example.net"
>> user.email = "foo@bar.com"
=> "foo@bar.com"
>> user.reload.email
=> "mhartl@example.net"

```

### オブジェクトの更新
```ruby:コンソール

>> user.update(name: "The Dude", email: "dude@abides.org")

```

### 特定の属性のみ更新
```ruby:コンソール

>> user.update_attribute(:name, "El Duderino")

```

### エラーメッセージの確認
```ruby:コンソール

>> user.errors.full_messages
=> ["Name can't be blank"]

```

### テストが失敗したときにエラーメッセージを出力
```ruby:test/models/user_test.rb

assert @user.valid?, "#{valid_address.inspect} should be valid"

```

### メールフォーマットを正規表現で検証
```ruby:app/models/user.rb

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX }

```

### データを複製する
```ruby:test/models/user_test.rb

duplicate_user = @user.dup

```

### データが重複していないことを検証
```ruby:app/models/user.rb

uniqueness: true

```

### 大文字小文字の区別する
```ruby:app/models/user.rb

case_sensitive: true 

```

### 一意性を強制するマイグレーション
```ruby:db/migrate/[timestamp]_add_index_to_users_email.rb

add_index :users, :email, unique: true 

```

### データベースの保存前に行う処理
```ruby:app/models/user.rb

before_save { self.email = email.downcase }

```

### ハッシュ化されたパスワードの実装
```ruby:app/models/user.rb

has_secure_password

```

## 第7章
### デバック情報をブラウザに表示
```ruby:app/views/layouts/application.html.erb

<%= debug(params) if Rails.env.development? %>

```

### デバック情報をターミナルに表示
```ruby:app/controllers/users_controller.rb

debugger

```

### デバック情報をターミナルに表示
```ruby:app/controllers/users_controller.rb

<%= gravatar_for @user %>

```

### オブジェクトに対するフォームを作成する
```ruby:app/views/users/new.html.erb

<%= form_with(model: @user) do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>

```

### HTTPステータスコード422をレスポンスとして設定
```ruby:app/views/users/new.html.erb

status: :unprocessable_entity

```

### キーに紐づけられたパラメータの中で選択されたものだけ変更可能
```ruby:app/controllers/users_controller.rb

params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)

```

### 受け取った整数(第1引数)に基づき英単語(第2引数)を複数形にする
```ruby:app/controllers/users_controller.rb

>> helper.pluralize(1, "error")
=> "1 error"
>> helper.pluralize(5, "error")
=> "5 errors"

```

### ブロックないの処理を実行する前後で値(第1引数)が変わらないことを確認
```ruby:test/integration/users_signup_test.rb

assert_no_difference 'User.count' do

```

### ブロックないの処理を実行する前後で変わる値(第1引数)の差異(第2引数)を確認
```ruby:test/integration/users_signup_test.rb

assert_no_difference 'User.count' do

```

### POSTリクエストの送信結果から指定されたリダイレクト先に移動する
```ruby:test/integration/users_signup_test.rb

follow_redirect!

```

## 第8章
### POSTリクエストの送信結果から指定されたリダイレクト先に移動する
```ruby:test/integration/users_signup_test.rb

follow_redirect!

```

### フラッシュメッセージ表示後、リクエストが発生したときに消滅する
```ruby:app/controllers/sessions_controller.rb

flash.now[:danger] = 'Invalid email/password combination'

```

### セッションをリセットする
```ruby:app/controllers/sessions_controller.rb

reset_session

```

### 右辺に値があれば左辺に格納、なければ何もしない
```ruby:app/helpers/sessions_helper.rb

@current_user ||= User.find_by(id: session[:user_id])

```

### HTTPのリクエスト(第3引数)を指定
```ruby:app/views/layouts/_header.html.erb

<%= link_to "Log out", logout_path,
    data: { "turbo-method": :delete } %>

```

## 第9章
### cookiesにデータを保存
```ruby:app/helpers/sessions_helper.rb

cookies.permanent.encrypted[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token

```

### cookiesのデータを破棄
```ruby:app/helpers/sessions_helper.rb

cookies.delete(:user_id)
cookies.delete(:remember_token)

```

## 第10章
### 新しいデータか確認
```ruby:コンソール

>> User.new.new_record?
=> true

```

### 該当メソッドが実行される直前で実行されるメソッド
```ruby:コンソール

before_action :logged_in_user, only: [:edit, :update]

```

### ページネーション
```ruby:app/views/users/index.html.erb

<%= will_paginate %>

```