LoginSignup
0
0

More than 1 year has passed since last update.

ログイン機能を作成する

Posted at

ルーティングを作成

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:

id: '.freeze;@output_buffer.append=( @user.id );@output_buffer.safe_append='
^^^ 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>
.
.
.

まだインスタンス変数の設定はしていない。
長くなりすぎたので次のページに書く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0