TodoList: desciptions テーブルを準備 ― 2007年01月07日 12時28分57秒
そうなると、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>
正しく表示される様になった。
最近のコメント