心はいつも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
ToDoの管理方法

東大生はノートがきれいだとか、、 きれいに書いている暇があったら、頭に書いて覚え …

Mac miniのメモリを自力で16Gに増設しました

Mac miniとDellの27インチIPS液晶、とても快適です。もっと快適にす …

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

3.2章は最初のテストです。 Railsチュートリアルは、アプリケーションの振る …

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

巷にRails4本がなく、Rails3本をRails4でやってみようとしたところ …

no image
RailsとRubyのインストール済みバージョン確認し、Rails3.2+Ruby1.9に戻してみる。

Rails3.2で作る必要があったので、Rails4はいったんおいといてRail …

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

10.3.3フィードの原型、です。 仕様の確認 ユーザーログイン後、トップページ …

Chromeでの文字化けを対処しました。

WordPressで自作テンプレを作ってみたのはよいものの、困った問題が2つ。 …

no image
iTunesをMacBookAirからWindowsに戻しました。

2月にMacBookAirを購入し、今までWindows上にあったiTunesを …

no image
ブログデザイン変更しました

予告通り、本日中にブログのデザインを変更できました。WordPressのテーマT …

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

5.3レイアウトのリンク、です。 AboutはRailsらしくない、とおっしゃっ …