app/controller/users_controller.rb を開いて以下のように編集します。
class UsersController < ApplicationController@のついたインスタンス変数をViewで参照します。
def new
@user = User.new
@title = "新規登録"
end
end
ここでは空で生成したUserオブジェクトと 、タイトルを変数に格納しています。
次に対応したviewを編集するのですが、Railsでは「app/views/コントローラ名/アクション名.html.erb」が該当するviewとなります。
今回の例では「app/views/users/new.html.erb」がnewアクションに対応したviewとなります。
<%= form_for(@user) do |f| %>form_forに渡している「@user」がコントローラで生成した@userです。
<%= f.label :name, "ユーザー名" %>
<%= f.text_field :name %><%= f.label :password, "パスワード" %>
<%= f.password_field :password %><%= f.label :password_confirmation, "パスワード(確認)" %>
<%=f.password_field :password_confirmation %><%=f.submit "新規登録" %><% end %>
form_forからendまでのブロック内はそのuserオブジェクトのフィールドに対応づけられます。「 f.text_field :name」なんていう指定だけで、うまいこと設定されるのはこのようにRailsが対応付けしてくれているからなんですね。
ここでは一つ一つのdivにクラス指定していますが、CSS用です。
今回はデザイン面は放置するので使いませんが。
ここまででほぼテストは通りますが、まだタイトルがNGです。
タイトルを定義しましょう。
ここではWebアプリ全体で「FavMovie | XXXX」というタイトルを表示するものとします。「XXXX」の部分には「新規登録」「ユーザー情報編集」などアクションに応じたタイトルを設定します。
アクション共通で使用されるテンプレートは app/views/layout/application.html.erb です。この中に「<%= yield %>」となっている箇所がありますが、ここにアクションごとの個別のテンプレートが挿入されます。先ほどの例でいえば「new.html.erb」の内容がここに挿入されます。
titleは上のheader要素内にありますが、今回は動的にタイトルを変更したいので、ここでそのようなコードを入れると可読性が損なわれます。そこでヘルパメソッドとして定義しましょう。
app/helpers/application_helper.rb を開きます。
module ApplicationHelper
def title
base_title = "FavMovie"
if @title.nil?
base_title
else
#{base_title} | #{@title}
end
end
end
ここで見ている@titleがコントローラで設定されるものです。セットされていない場合は「FavMovie」とだけ表示します。
そして application.html.erb で呼び出してみましょう。
<title><%= title %></title>これでテストは全てパスするようになります。
コンソールから「rails server」としてサーバを立ち上げて「http://localhost:3000/users/new」にアクセスしてみましょう。
3つのテキストボックスと1つのサブミットボタンがあることが確認できます。
ここでソースを確認してみるとform要素は以下のようになっています。
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">ここから「users」コントローラに対して「POST」で要求されることが読み取れます。
前回実行した「rake routes」の結果を再確認してみましょう。
POST /users(.:format) {:action=>"create", :controller=>"users"}「/users」に対して「POST」要求がされた場合、usersコントローラのcreateアクションに処理が渡ることが示されています。
というわけで、お次はcreateアクションの実装、といきたいところですが、その前にshowアクションを実装することにします。ルート定義はこちら。
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
「/users/1」などというパスでGETが要求されるとshowアクションが呼ばれます。
「:id」に当たる部分はUserテーブルのid(主キー)に該当します。
つまりリソース(ここではUserモデル)の1レコードに対する情報を表示するページとなります。
今回のUsersモデルの例でいえば各ユーザーの個人ページに当たるでしょう。
次回はこちらを作成してみることにします。
0 件のコメント:
コメントを投稿