« JavaScriptでソート・ページネーション対応テーブルを作る。 | トップページ | WindowsでgvimでTwitter »

2009年8月 7日 (金)

Railsで掲示板を作成

Railsの案件を受注する条件として一晩でRailsで掲示板を作ってくれと言われた。
夜の7時ぐらいに連絡があり、朝の9時10時には、仕上げてほしいと、かなりの無茶振り。
でも、せっかくなので、作ってみた。
Commentboard

12時まで、デザインで悩む。
いろいろなサイトを参考にして、上記のデザインに決定。
Rspecのテストファーストで開発をする。はっきりいって、使い捨てのシステムにテストファースト開発する意味など無かった。
ただ、癖にしとかないと、ついつい言い訳をしてテストファーストをしない体質になるのが怖かったので、時間が掛かるのを承知でテストファーストにした。

案の定、Rspec_on_railsのpostメソッドの使い方が解からず2時間ほどはまった。
モデルのフィールド、たとえばcommentモデルのbodyフィールドの場合、ブラウザからサーバに渡す形式ってcomment[body]=???の形で渡るので、同じようにpost(create,'comment[body]'=>'??? ')としてみても、サーバー側でparams[:comment]は空。試行錯誤のうち、post(create,:comment=>{:body=>'??? '})が正しいことが判明。この時点で4時近くになっていた。
コメントの投稿と閲覧ができるまでの実装は順調に進み、6時に終わった。

ただ、その時点の状態では、コメントは無限に投稿できるし、コメントの表示も今まで投稿された全部が一画面に表示される状態だった。
これだと本当に最低限すぎて実用性がまったくないのはいやだなーと思い、掲示板作成機能を追加することを画策。
そうなるとBoardモデルが必要になり、いままでのCommentモデルにBoadモデルのリファレンスを追加し、また、掲示板作成画面もどうすんのよ。って話になり、さらには、作成機能があったとしても、掲示板一覧を表示する画面も必要になるよね、やっぱり2chのように1掲示板の投稿を1000件ぐらいに制限する必要もあるよねということで、明らかに残り3時間では無理だと判明。

次に考えたのがページネーション機能。前のエントリにもあったようにJavaScriptでできるフレームワークがあるって思っても、無限に投稿されていくと日々重くなっていくのは、明らか。
素直にページを変える度にサーバにアクセスしてもいいのだが、それだとJavaScriptのフレームワークの大部分を改造する必要がある。ページングするには、全レコード数がでないといけないから、Model.find(:all).sizeみたいなこともしないといけないし、それって軽いんだっけと悩む。select_sqlだと速いのかなー。

どれも制限時間内に無理だと気づいたら、7:30を回っていて、あーこれは最低限の機能のソースを渡すしかないなと思っていたら、なにもこっちでデータをどう絞るか考えなくても、ユーザに選択させればいいじゃんと思いついた。
そこで、自分の作った家計簿の日付選択のライブラリがあることに思いあたり、思いのほか簡単に取り込めた。サーバー側も渡された日付をパースして、find時のconditionに渡すだけ。

すべて完了したのが9時過ぎ。あっという間だけど、永かった。
画面も一画面、モデル、コントローラも1個とかなりしょぼいが、一応実用できるとこまではいったんじゃないかなと思っている。

一応最近得意のgithubに挙げました。
http://github.com/takeshy/commentboard/tree/master

これで面接落ちたら、ショックでかそう。

|

« JavaScriptでソート・ページネーション対応テーブルを作る。 | トップページ | WindowsでgvimでTwitter »

rails」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68673/45858739

この記事へのトラックバック一覧です: Railsで掲示板を作成:

« JavaScriptでソート・ページネーション対応テーブルを作る。 | トップページ | WindowsでgvimでTwitter »