もう少しだけ、scaffoldハックしてみます。
scaffoldは、実装の手間がかなり軽減されるので便利ではありますが、どこまで便利にできているのかについては軽く疑問です。
僕の場合、MySQLで実装しているのですが、それぞれの型に対してどういう挙動をするのか興を覚えたので、ちょっとばかり調査してみました。
というわけで、まずはテーブルから。
MySQL:
-
CREATE TABLE `entities` (
-
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
-
`status` CHAR(2),
-
`code` VARCHAR(20),
-
`number` INTEGER UNSIGNED,
-
`data` TEXT,
-
`image` BLOB,
-
`flag` ENUM("0","1","2"),
-
`DATE` TIMESTAMP,
-
PRIMARY KEY (`id`)
-
)
-
ENGINE = INNODB;
使う頻度の高そうなCHAR・VARCHAR・INTEGER・TIMESTAMPは当然として。
挙動が変化してしまいそうなTEXT・BLOB・ENUMあたりも入れてみました。
あとは今までやってきたとおり、さくっとアプリを作って試してみます。
scaffoldでできたrhtmlのうち、一番違いが出るのはフォーム入力の部分になる【_form.rhtml】なので、そこを見てみます。
ソースはこちら。
HTML:
-
<%= error_messages_for 'entity' %>
-
-
<!--[form:entity]-->
-
<%= text_field 'entity', 'status' %></p>
-
-
<%= text_field 'entity', 'code' %></p>
-
-
<%= text_field 'entity', 'number' %></p>
-
-
<%= text_area 'entity', 'data' %></p>
-
-
</p>
-
-
<%= text_field 'entity', 'flag' %></p>
-
-
<%= datetime_select 'entity', 'date' %></p>
-
<!--[eoform:entity]-->
こんなソースばっかり見せられても、ですよね。ハイ。
まとめると、こんな感じになりますね。
- テキストフィールド
- テキストエリア
- プルダウン(日付専用)
- 何もない(!)
→ CHAR・VARCHAR・INTEGER・ENUM
→ TEXT
→ TIMESTAMP
→ BLOB
大体予想通りといえば予想通りだけど。
ENUMがラジオボタンだったり、BLOBがファイルアップロードのフォームになったりはしないんですね。
てか、BLOB型にいたっては何もないとは。
足場はあくまで足場であって、足場でしかないといういい証左ですわな。
いい勉強になりました(笑)

0 Responses to “scaffoldはどこまで有能か”