今日の半日は『RubyonRailsで作るWebアプリケーション入門』の本の4日目と5日目の部分を参照して、以下のStepでadnoteアプリケーションを作って、そしてテーブルの項目一個追加して、ScaffoldでMVCを作り直した。
そして、画面表示の英語の部分を日本語化しました。例えば、リンクと、ボタンと、タイトルと、メッセージなど。
その上、共通のHTMLファイルとスタイルファイルも少し編集して試した。
最後一番重要なことに、アプリケーションに名前で検索の機能を追加した。
--------------------------------
Step 1 adnoteアプリケーション新規
--------------------------------
>rails adnote -d postgresql
>cd adnote
>ruby script/generate scaffold note name:string address:string telno:string
* database.ymlファイルにusernameとpassword設定
>rake:db create
>rake:db migrate
>ruby script/server
http://localhost:3000/notesにアクセスして、項目を新規して、動作を確認する。
--------------------------------
Step 2 テーブル項目追加
--------------------------------
postgresqlのpgAdminⅢでadnote_developmentデータベースのnotesテーブルにmemo列(型:text)を追加する。
以下のように再度scaffoldによってモデルやコントローラ、それに表示ページのためのviewsフォルダ内のファイルを生成させる必要がある。
>ruby script/generate scaffold note name:string address:string telno:string memo:string
次のような質問が表示される。
overwrite app/views/notes/index.html.erb?(enter "h" for help)[Ynaqdh]a
aキーですべてのファイルを上書く。
--------------------------------
Step 3 アプリケーションの日本語化
--------------------------------
1. Viewのhtml.erbを文字コードをUTF-8を変換して、画面の英語表示を日本語に変換する。
index.html.erb
edit.html.erb
new.html.erb
show.html.erb
2. サイトタイトルの変更
app/views/layouts/notes.html.erbファイルの<title></title>の部分を以下のように編集する。
<title>アドレス帳:<%= controller.action_name %></title>
--------------------------------
Step 4 フッタ入れる
--------------------------------
notes.html.erbファイルに以下のコード入れると、フッタが表示されるようになる。
<hr>
<div align="center">
Copyright(C) Geyuye 2010 All Rights Reserved.
</div>
--------------------------------
Step 5 ページのスタイルを変更
--------------------------------
public/stylesheets/scaffold.cssファイルを変更してみる。
body { background-color: #87ceed; color:#000 }
--------------------------------
Step 6 検索機能の追加
--------------------------------
1. 一覧画面に検索部分を追加
index.html.erbファイルの先頭に次のようなコードを追加する
<% form_tag :action => 'search' do %>
<%= text_field :note, :name, :value => @keyword %>
<%= submit_tag '検索する' %>
<% end %>
2. コントローラに検索メソッドを追加
notes_controller.rbファイルに次のようなメソッドを追加する
def search
@search = Note.find(:all, :conditions => ["name LIKE ?", "%" + params[:note][:name] + "%"])
@keyword = params[:note][:name]
respond_to do |format|
format.html # search.html.erb
format.xml { render :xml => @notes }
end
end
3. 検索結果画面を作成
search.html.rbファイルを作成する。
---------------------------------------
<h1>検索結果</h1>
<table>
<tr>
<th>名前</th>
<th>住所</th>
<th>電話番号</th>
<th>メモ</th>
</tr>
<% for note in @search %>
<tr>
<td><%=h note.name %></td>
<td><%=h note.address %></td>
<td><%=h note.telno %></td>
<td><%=h note.memo %></td>
<td><%= link_to '詳細表示', note %></td>
<td><%= link_to '編集', edit_note_path(note) %></td>
<td><%= link_to '削除', note, :confirm => '本当に削除してもいいですか?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to '戻る', notes_path %>
---------------------------------------
では、これでいろいろめちゃくちゃ編集した後と検索機能を追加後実行する結果:
--------------------------------
終わりのメモ
--------------------------------
ruby script/generate scaffold テーブル名(単数形) カラム名1:データ型 カラム名2:データ型
database.ymlにdevelopmentとproductionとtest三つの節がある。。。
Railsはフレームワークだから、開発モード(development)や実操業モード(production)、それにテストモード(test)の各モードで動作し、それぞれのモードで異なるデータベースを利用することができるようになっている。
>rake:db createコマンドでXXX(アプリケーション名)_developmentというデータベースが自動的に作られる。
>rake:db create allコマンドでXXX(アプリケーション名)_developmentとXXX_productionとXXX_test三つのデータベースが作られる。
base.rb - 継承元のスクリプト
notes_controller.rbファイルの中: class NotesController < ApplicationController
application_controller.rbファイルの中: class ApplicationController < ActionController::Base
じゃ、この継承元のスクリプトはどこにあるだろう。
フォルダ:ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record
このファイルに、findやcreate、deleteといったメソッドが定義されいる。
HTMLソース
<% form_tag :action => 'search' do %>
⇒ <form action="/notes/search" method="post">
<%= text_field :note, :name, :value => @keyword %>
⇒ <input id="note_name" name="note[name]" size="30" type="text" />
<%= submit_tag '検索する' %>
⇒ <input name="commit" type="submit" value="検索する" />
Rubyファイルの作り方まだわかりません。。メソッドの書き方とか、パラメータの渡し方とか。。
ただ本の中のサンプルに従って検索機能を追加しましたけど、理解までちょっと。。
迷い続く。。