心はいつも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
プログラミングから離れた理由を思い出した

私は転職が多く5社で正社員で経験しています。全部IT系なのだけど全部職種が違いま …

no image
WindowsのiTunesからMacのiTunesへのデータ移行

MacBookAir 2日め。なかなかMacにふみきれなかったのは、Window …

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

6.3セキュアなパスワードを追加する、です。 パスワードはセキュアであるべきと思 …

no image
RailsTutorial4.0を高速で復習する。3.5章。最後の問題。

3.5演習、3もんめ、最後の問題です。 3.(上級者向け)「Heroku pag …

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

10.3.4マイクロポストを削除する、です。 仕様 マイクロポスト個別に削除でき …

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

9.2.2正しいユーザーを要求する、です。 テストを書く 自分以外の人がプロフィ …

herokuのWe’re sorry, but something went wrong.に苦しんだ

Rails3.2環境に戻してアプリを作ろうとしています。 herokuにpush …

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

3.3.4レイアウトを使って重複を解消する、です。 ここでapplication …

no image
「Follow me」バッジのつけ方。

ブログの横についている「Follow me」バッジ。いろんな方がつけているのを見 …

no image
Vaio Pよりも軽く感じる?MacBookAirとお出かけ

Vaoi Pを手放し、iPadも手放し、UQ Wimaxは解約し、DellのWi …