【119日目】【1日20分のRailsチュートリアル】【第9章】演習の4.
今日は「9.6 演習」の4.から。
9.6 演習
4.リスト9.60のパーシャルを使用して、new.html.erbビューとedit.html.erbビューをリファクタリングし、コードの重複を取り除いてください。
このとき、リスト9.61のようにフォーム変数fを明示的にローカル変数として渡す必要があることに注意してください。
また、provide関数を使うと、パーシャル化したnewフォームやeditフォームの重複をさらに取り除くことも可能です。
まずリスト9.60のパーシャルを作成する。
ファイルを作成して
$ touch app/views/users/_form.html.erb
下記のように更新。
app/views/users/_form.html.erb
<%= form_for(@user) do |f| %> <%= render 'shared/error_messages', object: @user %> <%= f.label :name %> <%= f.text_field :name, class: 'form-control' %> <%= f.label :email %> <%= f.email_field :email, class: 'form-control' %> <%= f.label :password %> <%= f.password_field :password, class: 'form-control' %> <%= f.label :password_confirmation, "Confirmation" %> <%= f.password_field :password_confirmation, class: 'form-control' %> <%= f.submit yield(:button_text), class: "btn btn-primary" %> <% end %>
new.html.erbビューをリスト9.61のようにリファクタリング。
<% provide(:button_text, 'Create my account') %>
を2行目に追加して、<%= render 'form' %>
でパーシャル使う。
app/views/users/new.html.erb
<% provide(:title, 'Sign up') %> <% provide(:button_text, 'Create my account') %> <h1>Sign up</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= render 'form' %> </div> </div>
edit.html.erbビューも同じようにリファクタリング。
app/views/users/edit.html.erb
<% provide(:title, "Edit user") %> <% provide(:button_text, "Save changes") %> <h1>Update your profile</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= render "form" %> <div class="gravatar_edit"> <%= gravatar_for @user %> <a href="http://gravatar.com/emails" target="_blank">change</a> </div> </div> </div>
サーバー起動してユーザー登録画面とユーザー情報編集画面表示させてみたけど特に問題なさそう。
リファクタリングできたかな。
$ rails server -b $IP -p $PORT
画面によってボタンの文字列もちゃんと変わってる。
今日の学習時間は【25分】。
次は「第10章 アカウントの有効化とパスワードのリセット」から。
やっと10章。まだまだ先は長いね…。