Head First Rails 5~10章

3
Shinichi Tokunaga @deepneko

「おかしいな。$50を入力したのに保存したら0.0になってしまったぞ?」

2010-03-05 09:08:22
Shinichi Tokunaga @deepneko

$が数字じゃないから文字列として認識されたよっていう例なんだが、相変わらずイラッ☆とくる。

2010-03-05 09:09:38
Shinichi Tokunaga @deepneko

バリデーションはMVCのどこに書くべきなの?

2010-03-05 09:10:17
Shinichi Tokunaga @deepneko

controllerが呼んだどのアクションにも対応できるようにmodelに書くべきだよね。

2010-03-05 09:11:46
Shinichi Tokunaga @deepneko

Railsにはシンプルなバリデーションにはバリデータを使います。

2010-03-05 09:19:59
Shinichi Tokunaga @deepneko

modelでバリデータが実行されるとレコードを保存していいかどうかの判断をして、エラーなら保存をスキップしてcontrollerに伝える。

2010-03-05 09:23:01
Shinichi Tokunaga @deepneko

お。modelの中でvalidates_numerically_ofとかでチェックしたい値をSymbol宣言しとけばいいだけ。これは便利。

2010-03-05 09:26:30
Shinichi Tokunaga @deepneko

@model.save(false)ってやればバリデーションを実行しない。

2010-03-05 09:37:56
Shinichi Tokunaga @deepneko

「validates_numerically_of :n, "不正な数値"」 とかでエラーメッセージも簡単に変えられます。

2010-03-05 09:39:48
Shinichi Tokunaga @deepneko

scaffoldで作ったならコレだけで大丈夫だけど、一から作ったならちゃんとエラー処理しなきゃダメだよ!

2010-03-05 09:46:25
Shinichi Tokunaga @deepneko

例えばvalidates_presence_ofで引っ掛かるとIDが保存されないから、本当は/ads/<id>に飛びたかったのに、/ads/にリダイレクトされちゃったりするわけよ。

2010-03-05 09:49:34
Shinichi Tokunaga @deepneko

この場合は@model.saveがtrueを返したかどうかでりダイレクト先を変えるエラー処理を書かなきゃいけないわけ。

2010-03-05 09:51:16
Shinichi Tokunaga @deepneko

はっ。@modelさんすいません。ブロックしても結構です。

2010-03-05 09:51:54
Shinichi Tokunaga @deepneko

scaffoldを作成するテーブルごとに実行したんだけど、それぞれに関連性を持たせたい。

2010-03-05 10:18:22
Shinichi Tokunaga @deepneko

例えばフライト情報と座席予約に関連性を持たせたい。

2010-03-05 10:19:28
Shinichi Tokunaga @deepneko

フライト情報、座席一覧、座席予約フォームを一つのページに表示したいんだけど!

2010-03-05 10:20:14
Shinichi Tokunaga @deepneko

scaffoldで生成したページのERBファイルがそれぞれあるよね。これをパーシャルというんだけど、同じフォルダにまとめて、一つのERBファイルから呼んであげよう。

2010-03-05 10:22:27
Shinichi Tokunaga @deepneko

パーシャルのファイル名は頭にアンダースコアをつけるのを忘れずにね!テンプレートとの区別をつけるために必要だよ!

2010-03-05 10:23:29
Shinichi Tokunaga @deepneko

あとはrender :partialで呼ぶだけ。

2010-03-05 10:24:10
Shinichi Tokunaga @deepneko

それだけじゃうまくいかないんだろうなぁと思って見てたら、ここでお決まりの「エラーが起きちゃった!なんで?」である。

2010-03-05 10:31:46
Shinichi Tokunaga @deepneko

ぇー・・・パーシャルの中でローカル変数初期化すんの・・・?キモい感じがするんだが。

2010-03-05 10:33:54
Shinichi Tokunaga @deepneko

あれ?テーブル同士の関連がまったく定義されてないぞ?と思ってたら、まさにその話が出てきた。本に誘導されている。悔しい。

2010-03-05 10:43:40
Shinichi Tokunaga @deepneko

は。テーブルって言ってた。Rails的にはmodelか。

2010-03-05 10:44:29