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 ですが、それは次回に。