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'