before_actionと部分テンプレート
これでrestaurantデータの登録(Create)、確認(Read)、編集(Update)、削除(Delete)の一連の機能を実装することができました。ここで改めてrestaurants_controller
を見てみましょう。よく見ると同じコードを何回も書いている部分はありませんか?DRYなコードにするために、コードをブラッシュアップしていきましょう。

対象となるレストランを探すコードはset_restaurant
という新しいメソッドを準備し、そのメソッドをbefore_action
で呼び出す形にしました。
また、ここではset_restaurant
メソッドはprivate
メソッドにしています。private
メソッドは同じクラス内(今回はRestaurantController
クラス)でのみ呼び出すことができるメソッドです。ルートから直接アクセスする必要がないメソッドはprivateメソッドとするようにしましょう。

さらに、edit
とnew
のフォームは全く同じものです。例えばレストランの電話番号や地図など、データの項目が追加された場合、それぞれのフォームを編集するのは非効率です。その際は部分テンプレートの機能を使いましょう。
部分テンプレートは以下のように使います。
1)viewsフォルダ内のrestaurants
フォルダの中に、共通する部分(今回はレストラン情報の登録・編集フォーム)を保存するための新しいファイルを作成します。ファイル名の頭には「_(アンダースコア)」をつけるのが決まりです。ファイルの中身がわかりやすいように_form.html.haml
という名前を付けます。これを部分テンプレートと呼びます。
2)部分テンプレートを呼び出す部分に= render 'form'
と記述します。今回はrestaurants
フォルダ内のnew.html.haml
とedit.html.haml
を以下のように編集します。

この教材はメンバー専用です
メンバー専用の教材にアクセスするには、
ハッカーIDでログインしてください。