チュートリアルの続きと、いろいろいじってわかったこと、わからなかったこと。
■チュートリアルの続き
今までやりながら書いていたので無駄に長かったので、終わってから書こうと思ったけどやっぱり長かった。
くそう。
とりあえず今さっきオートで作った蔵書管理アプリに、検索ページと、新規データ入力時に重複や間違いデータをはじくプログラム、あとは日付の表示を変えるのを追加してみた。
●検索ページを追加
まずは
app/views/books/list.rhtml
をコピーして名前を
app/views/books/search.rhtml
に変更。
中に
keyword:<%= text_field_tag 'keyword', params[:keyword] %>
<%=submit_tag 'search'%>
<%=end_form_tag%>
と追加。
次に
app/controllers/books_controller.rb
をあけて、
if request.post?
@books = Book.find(:all,:conditions=>['name like ?','%'+params[:keyword]+'%'])
else
@books =[]
end
end
を追加したら完成。
だったと思う。
http://localhost:3000/books/search
から入ると検索用のFORMが出てくるので、なんか入れてsubmitしたら検索結果が出てきた。
すごいなぁ。
●新規データ入力時に重複や間違いデータをはじくプログラム
app/models/book.rbでそういうのできるみたい。
「class Book ~」の行から「end」の行の間に以下のプログラムをねじ込め、とさ。
・isbnの欄には数字の1~9と、Xしか入力できないようにする
def validate
errors.add('isbn','has invalid format') unless isbn=~/\A[0-9X]+\z/
end
・isbnを重複しないようにする
・nameが空だったら登録できないようにする
ふむ、これ系統はいろいろあっておもしろそうだなぁ。
●日付の表示を変える
デフォルトだと、本の発行年月日を選択するときの表記が「jun」とか「mai」とか、なんかもう自分で書いていてスペル絶対間違っている気がするがとにかく英語で出てくる。
これは事件だ。
なので直すとさ。
app/views/books/_form.rhtmlのなかに
とあったのを
:use_month_numbers => true
%></p>
とすればいいそうだ。
ついでに
:end_year => Time.now.year,
を追加すれば、年のプルダウンが1950年から今年までのものになるそうです。
しかし、このフレームワークってのは便利なのかどうなのかだんだんわからなくなってきたなぁ。
まぁ、覚えちゃえば楽になるのかな。
ぶっちゃけ、そういうのあんま好きくないw
■いろいろいじってわかったこと
●別ページにFORMの内容をPOSTする方法
keyword:<%= text_field_tag 'keyword', params[:keyword] %>
<%=submit_tag 'search'%>
<%end%>
searchページを作ったのはいいんだけど、listの一覧ページに検索文字を入力する欄がなきゃだめっしょ。
という事でいじってみた。
最初はsearch.rhtmlにのっけたプログラムをそのまま書いてみて挫折。
どうしようと思っていろいろ見ていたら、そういやnew.rhtmlでformを別ページにPOSTしてんじゃんと気づいて引っ張りだしていじくりまわすこと10分。
動きました。
10分かかった最大の敗因は、多分自分に投げる場合は<%= form_tag %>で%の後にイコールが入ってるけど、別ページに投げる場合は<% form_tag :action => 'search' do %>と、%の後にイコールがない。
これでひっかかったのでした。
情けない。
●リンクの張り方
とすれば、
<a href=飛ぶ先>リンクの名前</a>
searchページからリストに戻るページを作りたくて探して見たら他のrhtmlファイルに「<%= link_to 'Back', :action => 'list' %>」とあったのでコピペしたら動いたのでうれしい。
●全部のページにつくヘッダとフッタのあるとこ
app/views/layouts/books.rhtml
これがそうらしい。
app/views/の中のbooksフォルダ覗くとき、ちょいと気になったので「このドイツおらんだ」と書いたら全てのページに出てくるのを確認。
スタイリッシュなページが瞬時にまぬけ時空に。
●スタイルシートのあるとこ
public/stylesheets/scaffold.css
デザイン変えたいと思って探して見たら、前述のapp/views/layouts/books.rhtmlの中にヒントがあったのでscaffold.cssを探し出して背景を緑に、文字色を緑にしてリロード。
よし、目が痛い。
これでスタイルシートのある場所を把握した。
しかし目が痛い。
この苦しみを知らない人は人生損していると思うので是非やってみるべきだ。
と、すぐに元に戻した初夏のヘタレでした。
■いろいろいじってわからなかったこと
●存在しない日付のはじきかた
「ライド・オン・Rails」のチュートリアルでは本の発行日情報を「年月」しか登録しないようになっていたので、自分はもう一歩先を行ってやると思って「年月日」の登録ができるように改造。
いざ登録しようとした時、遊び心で「2007/02/31」を選択。
エラーが出た。
2007/02/13とかならとおるんだけどなー。
なんかはじく方法ないかなぁと思って目をつけたのが「app/models/book.rb」。
この中でFORMの中身があってるかどうか判別するために使っていた「validates_なんとかかんとか」でどうにかならんもんかと「ライド・オン・Rails」「Ruby on Rails入門」の索引からいろいろ探して読んでみたけど、結局わからずじまい。
はまり中なので放置だけど、いつか直してあげたいね。
●searchページで1件も検索に引っかからなかった場合「ネーヨ」と言いたいが言えない
これは多分、Ruby知らないのがいけないんじゃないかな?
と思ったがカンタンにWebアプリって言ってんだから、どこかに設定潜んでんじゃないかと邪推中。
でもチュートリアルの中で取っ掛かりになるようなヒントを見つけられてないので放置。
ていうか、0件の検索結果をただ表示するだなんて恥ずかしいじゃんねー。
これもいつかリベンジ。
●PHPにも普通にフレームワークあった。
自分、ヘタレながらもPHPが一番つかえるんですよねー。
あー。
なんでPHPにもフレームワークあんじゃねーかと疑わなかったのか。
久しぶりに開いた「百式」の中の人のブログ「idea*idea」で知ったんですけど。
CakePHPって言うらしいんです。
しかもタイミングがいいんだか悪いんだか、ちょーど挑戦記がはじまってるんですけど。。。
あー、どうしよー、RubyonRails投げてCakePHPに移行しちゃおうかなぁ……。
でもなんか悔しいなぁ。
あーーーーーーなーーーやーーーむーーーー。