TodoList: ユーザ情報を追加2006年12月16日 11時34分50秒

複数の人達で TodoList を使えるようにするのなら、メール以外の連絡先も必要になるだろう。ユーザ情報に追加する。

連絡先と言えば、電話番号、ファックス番号、住所ぐらいだろうか。users テーブルは user_engine も使うので、contacts などと別のテーブルを準備して、一対一の対応を使って結びつける手もある。今回は、わざわざ別にテーブルを準備しないで、新たに項目を追加することにした。


% cat add_contacts.mysql 
USE 'todos';
ALTER TABLE users ADD title VARCHAR(20);
ALTER TABLE users ADD phone VARCHAR(20);
ALTER TABLE users ADD fax VARCHAR(20);
ALTER TABLE users ADD address VARCHAR(100);
% cat add_contacts.mysql | mysql
% echo 'use todos; describe users;' | mysql | tail
created_at      datetime        YES             NULL
updated_at      datetime        YES             NULL
logged_in_at    datetime        YES             NULL
deleted int(11) YES             0
delete_after    datetime        YES             NULL
organization_id int(11) YES             NULL
title   varchar(20)     YES             NULL
phone   varchar(20)     YES             NULL
fax     varchar(20)     YES             NULL
address varchar(100)    YES             NULL

新しい項目が末尾に追加された。

http://localhost:3000/user/list のページはデータベースの項目と値を ActiveRecord を通して、動的に取得しているため、何もしなくても電話番号等の新しい情報は表示される。しかし、ユーザ編集の画面は特別な書式で準備されているので、変更する必要がある。


% cvs diff app/views/user/_edit.rhtml
diff -u -r1.4 _edit.rhtml
--- app/views/user/_edit.rhtml  13 Dec 2006 05:27:41 -0000      1.4
+++ app/views/user/_edit.rhtml  15 Dec 2006 06:05:36 -0000
@@ -12,6 +12,10 @@
     <%= form_input changeable(user, "login"), "Login ID", "login", :size => 30 %><br/>
     <%= form_input changeable(user, "email"), "Email", "email" %>
 
+    <%= form_input changeable(user, "title"), "Title", "title" %>
+    <%= form_input changeable(user, "phone"), "Phone", "phone" %>
+    <%= form_input changeable(user, "address"), "Address", "address" %>
+
    <tr class="two_columns">
    <td class="prompt"><lable>Organization:</label></td>
    <td class="value">

元にある記述を基に新しい項目を追加する。なお、list のページでは organization は自動では表示されていない。その兼ね合いで、organization は list のページの最後に表示される。それに合わせて、_edit.rhtml も organization は最後にくるようにした。

また、電話番号などは自由に書き換えられる様にするために、変更可能にする必要がある。config/environment.rb にて指定できる。


% cvs diff config/environment.rb
diff -u -r1.2 environment.rb
--- config/environment.rb       3 Dec 2006 20:34:58 -0000       1.2
+++ config/environment.rb       15 Dec 2006 06:04:10 -0000
@@ -54,6 +54,10 @@
 module LoginEngine
   config :salt, "your-salt-here"
   config :user_email_notification, false
+  config :changeable_fields,
+    [ 'firstname', 'lastname', 'login', 'email',
+    'organization_id', 'title', 'phone', 'fax', 'address'
+    ]
 end
 
 module UserEngine

さて、複数の人で TodoList を使うのなら、作成者が欲しい。

前回次回