kouの技術的メモ

学習した内容の定着やアウトプット用に開設しました

Railsチュートリアル7章 ユーザー登録

まずはデバッグをしやすくするためにhtmlにデバッグ情報を表示させる部分をフッターに実装

<%= debug(params) if Rails.env.development? %>

これでparams情報がサイト上で取得できるようになる

REST思想とは…アプリケーションを構成するコンポーネント (ユーザーやマイクロポストなど) を「リソース」としてモデル化すること データやの作成、表示、更新、削除をそれぞれ一つの処理として独立させることで、楽に設計できる。

このRESTアーキテクチャに乗っ取ると、/users/1というURLに対してGETリクエストを発行するということを意味します。

routesに以下を追加すると、自動的にRESTfulなUsersリソースで必要となるすべてのアクションが利用できるようになる。
resources :users

例GET  /users  index   users_path  すべてのユーザーを一覧するページ
 GET  /users/1    show    user_path(user) 特定のユーザーを表示するページ

また、コントローラーのアクション内に

debugger

を入れるとdebuggerを挿入した瞬間の情報をサーバーコンソールで確認することができる。 デバッグ時に非常に有用。

復習

モデル名.update_attributes(カラム名:値 , カラム名:値,....)
データベースから取得したオブジェクトを更新
復習ついでにヘルパーとパーシャルの違い
ヘルパーもパーシャルも両方ビューに使うものですが、 
ヘルパーはテンプレートから呼び出されるライブラリとして使われます。 
一方、パーシャルは.html.erb(テンプレートファイル)になります。 

簡単に説明するとロジックはヘルパー内に記述し、再利用できるhtml テンプレートはパーシャルへ入れると良い。

7.3.4 統合テスト

assert_no_differenceは、 式を評価した結果の数値は、ブロックで渡されたものを呼び出す前と呼び出した後で違いがないと確認する

assert_no_difference 'User.count' do
...

つまり上記は、フォームを送信するテストが終わった後User.count(データベースのデータの総数)が増えていない=ユーザー登録ができていない=失敗している
と言う事を確認するということ。

復習

assert_select(セレクタ, [条件], [メッセージ])は、
セレクタで指定された要素が条件に一致するかどうかを判定する
7.4.1 登録フォームの完成
 def create
   @user = User.new(user_params)
   if @user.save
     redirect_to @user

redirect_to @user といった行がありますが、これは次のコードと等価になります。 redirect_to user_url(@user) これはredirect_to @userというコードから (Railsエンジニアが) user_url(@user)といったコードを実行したいということを、Railsが推察してくれた結果になります。

という説明でイマイチわからなかったが、わかりやすいように足りない説明を足すとこういうことらしい

そしてリンク先のパスとしてモデルオブジェクトが渡された場合、 Railsはオブジェクトを一意に表す値、つまり、idを取得しようします。だから最終的には、redirect_to @userは、redirect_to user_url(@user.id)と等価となります。

つまり

redirect_to user_url(@user) は

redirect_to("/users/#{@user.id}")
と等価になります。
7.4.4 成功時のテスト
assert_template(expected, message = nil) ]
そのアクションで指定されたテンプレートが描写されているかを検証

assert_template 'users/show'

7章のまとめ

  • debugメソッドを使うとデバッグのときにその瞬間の状態を知ることができる

  • form_forヘルパーは、Active Recordのオブジェクトに対応したフォームを生成する

  • flashの使い方

  • 送信フォームに対する統合テスト

  • 本番環境ではより高アクセスに耐えるPumaを選択肢、セキュアなSSLを導入。