ログイン機能を作成する

# ルーティングを作成
```routes.rb
Rails.application.routes.draw do
  get '/',              to: 'home#top'
  get '/signup',        to: 'users#new'
  post '/users/create', to: 'users#create'
  get '/login_form',         to: 'users#login'
  get 'users/index',    to: 'users#index'
  get 'users/:id',      to: 'users#show'
end
```
# コントローラを作成
```users_controller.rb
.
.
.
  def login_form
  end
.
.
.
```

## ログインページへリンクを作成
```application.html
.
.
.
       <li>
         <%= link_to "ログイン", "/login_form" %>
       </li>
.
.
.
```
ページが表示された。成功。

# POSTのリクエストを行えるようにする。
## ルーティングを設定する
```routes.rb
.
.
.
  post '/login',        to: 'users#login'
.
.
.
```
## コントローラーを作成
```users_controller.rb
.
.
.
  def login
    @user = User.find_by email: params[:email], password: params[:password]
    redirect_to "/users/#{@user.id}"
  end
.
.
.
```
まずは探すだけにする。
これでメールアドレスとパスワードで探せる。

## login_form.html.erbでpostできるようにする
```login_form.html
.
.
.
<div>ログインフォーム</div>
  <div>
    <%= form_tag( "/login", method: :post) do  %>
      <p>メールアドレス</p>
      <input name="email">
      <p>パスワード</p>
      <input name="password">
      <input type="submit" value=ログイン>
    <% end %>
  </div>
.
.
.
```
ログイン成功！

## loginアクションの条件分岐
テーブルになかったら再びログインフォームに戻す。
```users_controller.rb
  def login
    @user = User.find_by email: params[:email], password: params[:password]
    if @user
      redirect_to "/users/#{@user.id}"
    else
      render "/login_form"
    end
  end
```

## Template is missing
Missing template /login_form with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in: * "/Users/hyoudoumasatomo/Repos/garden/app/views" * "/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/actiontext-7.0.2.3/app/views" * "/Users/hyoudoumasatomo/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/actionmailbox-7.0.2.3/app/views" Did you mean? users/login_form users/login layouts/rails/conductor users/hogehoge users/index rails/conductor/action_mailbox/inbound_emails/index

```users_controller.rb
.
.
.
  def login
    @user = User.find_by email: params[:email], password: params[:password]
    if @user
      redirect_to "/users/#{@user.id}"
    else
      render "login_form"
    end
  end
.
.
.
```
renderはパスを書くのではなくてファイル名だったような気がする。
成功！

前に戻ってユーザー情報を編集する
# ユーザー情報を編集
まず編集のリンクを作成してルーティングを作成してコントローラを作成
## 
```route.rb
Rails.application.routes.draw do
.
.
.
  get 'users/edit',     to: 'users#edit'
end
```
## 編集ページを作成する。
これで編集内容を決める
```edit.html
.
.
.
  <div>ユーザー情報編集</div>
  <div>
    <%= form_tag('/users/create', method: :post) do  %>
      <p>ユーザー名</p>
      <input name="name" value="<%= @user.name %>">
      <p>メールアドレス</p>
      <input name="email" value="<%= @user.email %>">
      <p>パスワード</p>
      <input name="password" value="<%= @user.password %>">
      <input type="submit" value=保存>
    <% end %>
.
.
.
```
## editアクションを作成する
名前とメールアドレスとパスワードを編集する
```users_controller.rb

```

## editページを作成する
```edit.html
.
.
.
  <div>ユーザー情報編集</div>
  <div>
    <%= form_tag('/users/create', method: :post) do  %>
      <p>ユーザー名</p>
      <input name="name" value="<%= @user.name %>">
      <p>メールアドレス</p>
      <input name="email" value="<%= @user.email %>">
      <p>パスワード</p>
      <input name="password" value="<%= @user.password %>">
      <input type="submit" value=保存>
    <% end %>
  </div>
.
.
.
```
##　showページにリンクを作成
```show.html
.
.
.
  <div>ユーザー紹介</div>
  <div>
    <h5> id: <%= @user.id %> </h5>
    <h2> <%=@user.name %> </h2>
    <%= link_to "編集", "/users/edit" %>
  </div>
.
.
.
```
これで行くか？

## NoMethodError in Users#show
Showing /Users/hyoudoumasatomo/Repos/garden/app/views/users/show.html.erb where line #12 raised:
<h5> id: '.freeze;@output_buffer.append=( @user.id );@output_buffer.safe_append=' </h5>
                                                   ^^^
showアクションがない ```show.html.erb```の12行目がおかしい。
調べてみる。

```show.html
.
.
.

<div>ユーザー情報編集</div>
  <div>
    <%= form_tag('/users/create', method: :post) do  %>
      <p>ユーザー名</p>
      <input name="name" value="<%= @user.name %>">
      <p>メールアドレス</p>
      <input name="email" value="<%= @user.email %>">
      <p>パスワード</p>
      <input name="password" value="<%= @user.password %>">
      <input type="submit" value=保存>
    <% end %>
  </div>
.
.
.
```
まだインスタンス変数の設定はしていない。
長くなりすぎたので次のページに書く