[Day7 Rails Tutorial]第七章途中|難しくなってきた!特にテスト。。[7.1〜7.3.2]

Rails Tutorial day1 感想 まとめ 振り返り エラー解決 演習問題 回答

Day7です!一週間継続できました!

この調子で最後まで毎日やりきりたいですね。

それでは今日もがんばっていきましょー!

読んでいただいている方、いつもありがとうございます!

初心者なもので、たまに間違った内容もあるかと思います。

その際にはコメントやTwitterでご指摘いただけると幸いです!

 

[Day7]第七章7.1〜7.3.2作業ログ

おなじみトピックブランチ作成

git checkout -b sign-up

おなじみ。

 

デバッグを表示できるように

デバックをページに表示できるようにコードを改変。

CSSはおいておいて、HTMLだけ書いてきます。

application.html.erb
<!DOCTYPE html>
<html>
...
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      ...
      <%= debug(params) if Rails.env.development? %>
    </div>
  </body>
</html>

 

resources :users半端ないって

次に今回のユーザー情報をページに表示する方法を考えていきます。

もちろんルーティングやアクションが必要なのですが、たった一行でいいみたい。

routes.rb
Rails.application.routes.draw do
  root 'static_pages#home'
  get  '/help',    to: 'static_pages#help'
  get  '/about',   to: 'static_pages#about'
  get  '/contact', to: 'static_pages#contact'
  get  '/signup',  to: 'users#new'
  resources :users
end

このたった一行のresources :usersを追加するだけで、ユーザー登録に必要なルーティングもアクションもそろってしまうそう。

サンプルアプリケーションにこの1行を追加すると、ユーザーのURLを生成するための多数の名前付きルート (5.3.3) と共に、RESTfulなUsersリソースで必要となるすべてのアクションが利用できるようになるのです。

progateでは一つ一つ作成していった思い出。

こんな裏技みたいなコードもあったんだね。

 

debuggerメソッドでエラーを追跡

エラーを特定したりするのに、便利なdebuggerメソッドがあります。

実はそのgem、byebugはもうインストールしていたそう。

挙動がよくわからない箇所やトラブルが起こっていそうなところに、debuggerというコードをさしこむだけでOK。

すると、Railsサーバーを立ち上げたターミナルに(byebug)プロンプトが表示される。

ここでは、アプリケーションのdebuggerが呼び出された瞬間の状態を確認できる。

 

新規登録フォームの作成

コードは用意されているので、それらを紐解いていく。

この埋め込みRubyコードは下のようなHTMLを生成している。

埋め込みRuby
<%= f.label :name %>
<%= f.text_field :name %>
生成されたHTML
<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />

これも同様。

埋め込みRuby
<%= f.label :email %>
<%= f.email_field :email %>
生成されたHTML
<label for="user_email">Email</label>
<input id="user_email" name="user[email]" type="email" />

 

Strong Parametersでセキュアな設計を

正直内容が難しくてわかってない。

要点は、@user = User.new(params[:user]) みたいに、paramsでハッシュ全体を初期化すると、危ないということ。

もし、admin属性があれば、そこから管理者権限を奪われてしまう。

それを防止するために、Strong Parametersを導入するのばベターらしい。

 

メモ

Railsの3つの環境

Railsには3つの環境がデフォルトで存在する。

  • テスト環境 (test)
  • 開発環境 (development)
  • 本番環境 (production)

Rails consoleのデフォルト環境は、開発環境。

rails console testとすれば、テスト環境でコンソール起動できる。

console、server、migrateの3つのコマンドでは、デフォルト以外の環境を指定する方法がそれぞれ異なっている。

コマンドをまとめておくと、こんな感じ。

rails console test

rails server --environment production

rails db:migrate RAILS_ENV=production

 

md5はハッシュ関数の1つ

チュートリアルで突然md5が同情して、md5ってなんだろ?と思って調べてみました。

ちょっとルールがついたハッシュ関数の1つだそうです。

  • MD5(Message Digest Algorithm 5)
  • 任意の長さの原文を元に128bitの値を生成するハッシュ関数の1つ
  • 与える値の長さがなんであれ、生成されるのは128bitの値になる
  • 同じ入力値からは必ず同じ値が得られる一方、少しでも異なる入力値からは全く違う値が得られる
  • (中略)
  • 【注意】 ハッシュ化と暗号化は異なるので注意。ハッシュ関数は不可逆な一方向関数を含むため、ハッシュ値から原文を再現することは(基本的に)不可能。一方、暗号化されたものは復号化できる。md5はハッシュ化の方。

参考:md5ざっくりまとめ

 

ヘルパーメソッドはviewをDRYするためのモジュール

ヘルパーメソッドがまだピンと来てなかったので、調べた。

ViewをよりシンプルにDRYに書くための、Railsで用意されたモジュール。

基本的にはviewをhelpしてくれるもの。自分で作ることもできる。

参考:Railsヘルパーメソッドのまとめ(よく使うもの)

知らずうちに使っていた、<%= form_tag %>とか<%= link_to %>とかも、実はrailsがデフォルトで用意してくれているヘルパーらしい。

 

タケシなりの演習の回答

未送信のユーザー登録フォーム (図 7.12) のURLと、送信済みのユーザー登録フォーム (図 7.18) のURLを比べてみましょう。なぜURLは違っているのでしょうか? 考えてみてください。

  • 未送信の時のURL:/signup
  • 送信済みの時のURL:/users

なんで違うんでしょうか。

ちょっと予想になってしまいますが、/signupにpostリクエストを送った時に、/usersにリダイレクトしているからかな。

Progateでも似たような機構を扱っていて、その時はこうだった気がする。

ただ、今回はresources :usersという魔法のコマンドを使ったので、中身が全然わからないや。

自動的にリダイレクトする機能も含んでいるんでしょうか?

 

[Day7]まとめ

  • 学習範囲:7.1〜7.3.2
  • 学習時間:3時間50分
  • 総学習時間:30時間50分
  • 反省点:ところどころ超難しい。何回も読み直してたら時間がめっちゃかかった。
  • 備考:明日は7,8章まとめてクリアする。

読んでいただいている方、いつもありがとうございます!

初心者なもので、たまに間違った内容もあるかと思います。

その際にはコメントやTwitterでご指摘いただけると幸いです!

 

コメントを残す

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