Day7です!一週間継続できました!
この調子で最後まで毎日やりきりたいですね。
それでは今日もがんばっていきましょー!
読んでいただいている方、いつもありがとうございます!
初心者なもので、たまに間違った内容もあるかと思います。
その際にはコメントやTwitterでご指摘いただけると幸いです!
[Day7]第七章7.1〜7.3.2作業ログ
おなじみトピックブランチ作成
git checkout -b sign-up
おなじみ。
デバッグを表示できるように
デバックをページに表示できるようにコードを改変。
CSSはおいておいて、HTMLだけ書いてきます。
<!DOCTYPE html>
<html>
...
<body>
<%= render 'layouts/header' %>
<div class="container">
...
<%= debug(params) if Rails.env.development? %>
</div>
</body>
</html>
resources :users半端ないって
次に今回のユーザー情報をページに表示する方法を考えていきます。
もちろんルーティングやアクションが必要なのですが、たった一行でいいみたい。
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を生成している。
<%= f.label :name %>
<%= f.text_field :name %>
<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />
これも同様。
<%= f.label :email %>
<%= f.email_field :email %>
<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してくれるもの。自分で作ることもできる。
知らずうちに使っていた、<%= 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でご指摘いただけると幸いです!
コメントを残す