0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

rails5 progate 整理メモ

Posted at

ログイン失敗時のメッセージを表示させる

送信されたパラメータにあうユーザーがない場合にメッセージを表示させる。
その時にお題のメッセージを表示させる

どうやってエラーメッセージを表示させるのか忘れた。

ちょっと答えを見た。

users_controller.rb
def login
    .
    .
    .
    else 
      @error_messeage = "メールアドレスまたはパスワードが間違っています"
      render("login")
    end
  end

loginページに行く前にインスタンス変数に代入しておく。そうすることで中身を入れることができる。

<% if @error_messeage %>

@error_messeageに中身があれば表示されるようにする。

login.html
        <% if @error_messeage%>
          <div class="form-error">
            <!-- 以下の<%= %>を用いてエラーメッセージを表示してください -->
            <%= @error_messeage %>
          </div>
        <% end %>

これで表示された。

ログインに失敗した場合にフォームに初期値が入るようにしましょう。

送信されたパラメータが保存されるようにする
ログインした時にどういうことをやっていたかを振り返る。

users_controller.rb
def login
    @user = User.find_by(
      email: params[:email],
      password: params[:password])
    if @user
      session[:user_id] = @user.id
      flash[:notice] = "ログインしました"
      redirect_to("/posts/index")
    else
      @email = params[:email]
      @password = params[:email]
      @error_messeage = "メールアドレスまたはパスワードが間違っています"
      render("login")
    end
  end

多分else以下にしたのはその時だけ実行させるため、余計なことをさせないためだと思う。
インスタンス変数に送信されたパラメータを代入させる

@email = params[:email]

どうやって文字列を表示させるか

<input ... value= <%= "@email" %>>

これを使う。

ログインに失敗した場合に、メールアドレスが初期値としてフォームに表示されていません

この原因はよくわからなかった。
思い当たるところとしては

routes.rb
  get "login" => "users#login"
  post "login" => "users#login"

ビューのアクションとログインさせるアクションを合わせていたからだと思っている。

routes.rb
  get "login" => "users#login_form"
  post "login" => "users#login"

他にあると思うが今は思いつかない。
あの時焦らずに調べながら直していければよかった。

ユーザー登録時にログイン状態にしよう

user_controller.rb
  def create
    @user = User.new(
      name: params[:name],
      email: params[:email],
      password: params[:password],
      image_name: "default_user.jpg"
      )
    if @user.save
      session[:user_id] = @user.id
      flash[:notice] = "ユーザー登録が完了しました"
      redirect_to("/users/#{@user.id}")
    else
      @password = params[:password]
      render("users/new")
    end
  end

新規登録ページ

new.html
.
.
.
        <%= form_tag("/users/create") do %>
          <p>ユーザー名</p>
          <input name="name" value="<%= @user.name %>">
          <p>メールアドレス</p>
          <input name="email" value="<%= @user.email %>">
          <p>パスワード</p>
          <input type="password" name="password" value="<%= @user.password %>">
          <input type="submit" value="新規登録">
        <% end %>
.
.
.

答えでは

user_controller.rb
@password = params[:password]

を書かずに

new.html
<input type="password" name="password" value="<%= @user.password %>">

@userのパスワード属性を呼んでた。
そのほうが1行書かずに済むからだろう。
それを真似した。

まだまだrailsの旅は続く!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?