Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の2周目です。
第9章 ユーザーの更新・表示・削除 | Rails チュートリアル
第9章 ユーザーの更新・表示・削除
フレンドリーフォワーディングの実装(ログイン前にアクセスしたURLにログイン後に遷移する)
あたりも良いですね。
複数オブジェクトに対するpartial呼び出し
これが
<% @users.each do |user| %> <%= render user %> <% end %>
こう書けます
<%= render @users %>
知らんかった。
Railsは@usersをUserオブジェクトのリストであると推測します。 さらに、ユーザーのコレクションを与えて呼び出すと、 Railsは自動的にユーザーのコレクションを列挙し、 それぞれのユーザーを_user.html.erbパーシャルで出力します
partialのloop呼び出しとか遅いかもと思って雑に計測してみると
速度的には誤差っぽい。この程度なら問題ないようです。
before
Rendered users/index.html.erb within layouts/application (8.8ms) Rendered layouts/_shim.html.erb (0.1ms) Rendered layouts/_header.html.erb (0.8ms) Rendered layouts/_footer.html.erb (0.3ms) Completed 200 OK in 91ms (Views: 89.1ms | ActiveRecord: 0.8ms)
after
Rendered users/_user.html.erb (5.4ms) Rendered users/index.html.erb within layouts/application (16.0ms) Rendered layouts/_shim.html.erb (0.1ms) Rendered layouts/_header.html.erb (0.6ms) Rendered layouts/_footer.html.erb (0.2ms) Completed 200 OK in 85ms (Views: 83.2ms | ActiveRecord: 0.8ms)
9.6 演習
1つ目。
演習は全てやっていますが、これで合っているかどうか不安なので、載せてみます。
test "should redirect user_path with friendly forwarding when request user_path before login" do get user_path(@user) log_in_as(@user) assert_redirected_to user_path(@user) end test "should redirect user_path without friendly forwarding when request edit before login" do name = "Foo Bar" email = "foo@bar.com" patch user_path(@user), user: { name: name, email: email, password: "password", password_confirmation: "password" } assert_not flash.empty? log_in_as(@user) assert_redirected_to user_path(@user) end