心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。7.3章。

   


7.3ユーザー登録失敗、です。
ここでは、エラーメッセージの表示を実装します。

7.3.1正しいフォーム、です。
ところで、入力系のチェックは、まずUI側で行ってロジック側で行って、DB側で行うの3段構えですが、RailsTutorialでは、通常JavaScript等でやるUI側での入力エラーチェックは実装していませんね。
ロジック側で判定しその結果を表示する内容です。

この部分はテストコードがないんだな。いいのかな?

ちょっとすっとばして、
7.3.2 Strong Parameters、です。

Rails4のStrong Parameters

ユーザーが入力した値はparamsハッシュに入ってきますが、それをそのまま使うのはセキュリティ上ダメ。
@user = User.new(params[:user])
でも、こういう実装Rails3のscaffoldでデフォでやってましたよね。Rails4からはStrong Parametersを使う。

7.4.1登録フォームの完成、ですがすっとばして、
7.4.2flash、にあるcreatアクションを書いてしまいます。

リスト7.28 ユーザー登録ページにフラッシュメッセージを追加する。
app/controllers/users_controller.rb

class UsersController < ApplicationController
  .
  .
  .
  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

  private

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

privateがタブの段ずれているようですが、こういうお作法とのこと。privateに定義してあるuser_paramsで、入力値をチェックしてから@userに保存する。

7.3.3ユーザー登録のエラーメッセージ、です。

リスト7.23 ユーザー登録フォームでエラーメッセージを表示するコード。
app/views/users/new.html.erb

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>
      .
      .
      .
    <% end %>
  </div>
</div>

リスト7.27 flash変数の内容をWebサイトのレイアウトに追加する。
app/views/layouts/application.html.erb

<!DOCTYPE html>
<html>
略
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <% flash.each do |key, value| %>
        <div class="alert alert-<%= key %>"><%= value %></div>
      <% end %>
      <%= yield %>
      <%= render 'layouts/footer' %>
      <%= debug(params) if Rails.env.development? %>
    </div>
略

リスト7.24 フォーム送信のエラーメッセージを表示するパーシャル。
app/views/shared/_error_messages.html.erb

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

<%= render 'shared/error_messages' %>でエラー表示していますが、そこのコードはshared/_error_messages.html.erbに書いています。errors.full_messagesにエラーが入ってきている。<% if @user.errors.any? %>でエラーの有無を判定して、あれば見に行くという処理です。

リスト7.25 エラーメッセージにスタイルを与えるためのCSS。
app/assets/stylesheets/custom.css.scss

略
/* forms */
略
#error_explanation {
  color: #f00;
  ul {
    list-style: none;
    margin: 0 0 18px 0;
  }
}

.field_with_errors {
  @extend .control-group;
  @extend .error;
}

ユーザー登録フォーム、エラー表示、 flashメッセージ表示を一気にやりました。テストは成功しています。

7.4.4 SSLを導入して本番環境をデプロイする、です。

コミットしてbranchをmergeします。
git add .
git commit -m “Finish user signup”
git checkout master
git merge sign-up

SSL有効にする

リスト7.29 本番環境のアプリケーションでSSLを有効にする。
config/environments/production.rb

SampleApp::Application.configure do
 略
  # Force all access to the app over SSL, use Strict-Transport-Security,
  # and use secure cookies.
  config.force_ssl = true
 略
end

#でコメント化されている行があるので外します。
herokuにpushするところは省きます。

ユーザー登録はちゃんとSSLでやっているところがえらいです。

7.5最後に、です。
8章で認証を実装するとのこと。

viewとcontorollerの開発でテストがあまり無いため、端折ってきました。

次は、
7.6演習
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

吉瀬美智子さんが美しすぎて、新サイト作りました

以前からやりたいと思っていたのですが、吉瀬美智子さんが美しすぎてやる気がでました …

no image
RailsTutorial4.0を高速で復習する。4.1章の途中から。

さて、4.1章の途中にある、変だなと思っている箇所、 リスト4.4 Homeペー …

no image
RailsTutorial4.0を高速で復習する。7.6章。演習。

7.6演習 1問目です。 リスト7.30のコードを使用して、7.1.4で定義され …

no image
RailsTutorial4.0を高速で復習する。8.2.5章。

8.2.5ユーザー登録と同時にサインインする、です。 ユーザーが登録を行った後、 …

no image
wordpressのサーバー移行したい

本当に自分の備忘録として。 サーバー移行したいなと考えています。 同時に、Wor …

民●党批判したら検索順位が落ちたのか?

このブログ、airpucciのドメインも元のwww.airpucci.comに戻 …

no image
Rubyの%を使う記法のうち、 %w

Rubyで%を使う記法は、たのるー(たのしいRuby)によると、以下の6通り % …

no image
RailsTutorial4.0を高速で復習する。終わりました。

作りたいサービスがあってコーディング開始していたのですが、もう1回振り返り学習し …

no image
Everyday Rails頑張る。3章モデルスペック

テスト書いてからコードの決意。 今のような環境がない時代のプログラマでしたが、自 …

no image
Ruby on Railsのインストール

Rubyのアップデートが終わったので、いよいよRailsをインストールします。 …