TodoList: desciptions テーブルを準備2007年01月07日 12時28分57秒

Todo レコードを各言語毎に準備するのではなく、description のみを言語毎に準備する事にする。descriptions テーブルを作り todos テーブルと関連づける。今までの、Todo の description は title に変更する。「todos has many descriptions in multi-languages and description belongs to a todo.」だろう。一対多だ。

そうなると、todo/show にて全言語の description を表示し、todo/edit で任意の言語の description を編集できる様にすればいい。todo/list や todo/new を変更する必要も無くなる。また、todos テーブルに付いている付加情報を多言語間で、同期する必要も無くなる。

さっき追加した、language_id を todos テーブルから削除し、description を title に変更する。


% cat multilingual2.mysql
USE todos;
DROP TABLE IF EXISTS `descriptions`;
CREATE TABLE `descriptions`
(
  `id` INT NOT NULL AUTO_INCREMENT,
  `todo_id` INT NOT NULL,
  `description` VARCHAR(100) NOT NULL,
  `language_id` INT NOT NULL,
  PRIMARY KEY(`id`)
);
ALTER TABLE todos DROP language_id;
ALTER TABLE todos CHANGE description title VARCHAR(100) NOT NULL;
% cat multilingual2.mysql | mysql

変更後、http://localhost:3000/todo/list にアクセスしても問題は無かったが、http://localhost:3000/todo/edit/1 に移ったら、

NoMethodError in Todo#edit

Showing app/views/todo/_form.rhtml where line #5 raised:

undefined method `description' for #<Todo:0x9f19c2c>

Extracted source (around line #5):

2: 
3: <!--[form:todo]-->

4: <p><label for="todo_description">Description</label><br/>
5: <%= text_field 'todo', 'description'  %></p>
6: 
7: <p><label for="todo_done">Done</label><br/>

8: <%= text_field 'todo', 'done'  %></p>

と出てしまった。ruby script/generate scaffol をやった後にテーブルを変更すると、案の定問題が出るらしい。

修正する。


% cvs diff app/views/todo/_form.rhtml
diff -u -r1.1 _form.rhtml
--- app/views/todo/_form.rhtml  4 Jan 2007 03:10:47 -0000       1.1
+++ app/views/todo/_form.rhtml  4 Jan 2007 05:29:11 -0000
@@ -1,8 +1,8 @@
 <%= error_messages_for 'todo' %>
 
 <!--[form:todo]-->
-<p><label for="todo_description">Description</label><br/>
-<%= text_field 'todo', 'description'  %></p>
+<p><label for="todo_title">Title</label><br/>
+<%= text_field 'todo', 'title'  %></p>
 
 <p><label for="todo_done">Done</label><br/>
 <%= text_field 'todo', 'done'  %></p>

正しく表示される様になった。

前回次回。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/01/07/1098205/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。