rails 独学して軽くにちゃんまとめつくる

読者です 読者をやめる 読者になる 読者になる

エラーメッセージの追加

エラー時のメッセージと、成功時のメッセージの2つがある。

エラー時のメッセージはrailsがいろいろと機能を付けてくれているのですんなりかける。成功時のメッセージは flash というのをつかって自分で作らなければいけない。でも少ない。どっちも簡単ってわけだ。

 

失敗時:自動でメッセージ作成、表示先:form画面、渡し場所:自動

成功時:flashでメッセージ 、表示先:application.erb、渡し場所:コントローラー

 

こんな風に対比させたらわかりやすいはず。

rails tutorialでは一から作る必要があったが、scaffold を使えばどちらのメッセージも自動でつくってくれるのだから、超超基本的な事項なんだなーと思い、肩ひじ張らずにやっていけばいいとおもう。

 

 

 

エラーを表示するパーシャルを作ってここで表示する。これをフォームの間に挟んで、エラーがでたときに表示させるようにする。

 

app/views/shared/_error_messages.html.erb

<% if @user.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
 

app/views/users/new.html.erb

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>



<% end %>

 

 css

#error_explanation {
  color: red;
  ul {
    color: red;
    margin: 0 0 30px 0;
  }
}
.field_with_errors {
  @extend .has-error;
  .form-control {
    color: $state-danger-text;
  }
}

 

 

 

app/controllers/users_controller.rb

 def create

   @user = User.new(user_params)
    if @user.save
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end

 

<!DOCTYPE html>
<html>
  .
  .
<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div> <% end %>
<%= yield %>