Ruby on Rails を使ってみよう(その 3)

そろそろお時間的に View と Controller も作りたくなってきましたよね ? ね ? (勝手に決めるな)

というわけで作りましょう。

View と Controller を作る(その 1)

View と Controller のもとになるファイル群はまとめて rails コマンドで作れます。

> rails generate controller custsearch index search

custsearch が Controller の名前で、その Controller のアクションとして index と search を作るコマンドになります。そして、sample/app/controllers 直下に custsearch_controller.rb が、sample/app/views の直下に custsearch というフォルダができて、その直下に index.html.erb と search.html.erb というファイルが、sample/app/assets/javascripts 直下に custsearch.js.coffee (CoffeeScript ファイル)が、sample/app/assets/stylesheets 直下に custsearch.css.scss (SCSS ファイル)ができます。他にも必要なファイル群が自動生成されますが、それは割愛します。

さて View ですが、今回は index と search の両方のアクションで同じ HTML を使いまわししたいので、部分テンプレートと呼ばれる手法を使います。sample/app/views/custsearch 直下に _form.html.erb というファイルを作成してください(最初にアンダースコアを付けるのを忘れずに !)。中身は以下のようにします。

<h1>顧客検索</h1>
<%= form_for @customer, :url => { :action => 'search' }, :html => { :method => :post } { |f| %>
  <table>
    <tr><td>顧客 ID</td><td><%= f.text_field :id, { :size => 5, :required => true } %></td></tr>
    <tr><td>顧客名</td><td><%= f.text_field :name, { :size => 20, :readonly => true } %></td></tr>
    <tr><td>連絡先</td><td><%= f.text_field :phone, { :size => 20, :readonly => true } %></td></tr>
  </table>
  <p><%= f.submit('検索') %></p>
<% } %>

そうしたら、index.html.erb と search.html.erb を編集して次のようにします。

<%= render 'form' %>

これで、index.html.erb と search.html.erb から _form.html.erb を呼び出すことができます。

後はレイアウトと Controller ですが、それは次回に。