TodoList: ユーザの所属先 ― 2006年12月07日 13時34分10秒
Associations に関連する複数のテーブルについて書いてある。
- has_one
- has_many
- belongs_to
- has_and_belongs_to_many
各ユーザは一つの組織にしか所属できないこととする。つまり、多:1 の関係になる。an organization has many users; a user belogns to an organization だ。
organizations のテーブルを作り、その後 user_engine が作った、users テーブルに organization_id を追加する必要がある。
% cat support_organization.mysql
USE todos;
CREATE TABLE `organizations`
(
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`description` VARCHAR(100),
PRIMARY KEY(`id`)
);
ALTER TABLE users ADD organization_id INT;
% cat support_organization.mysql | mysql
今の時点では、support_organization.mysql として保存する。後で、別の SQL コマンドと一緒にする予定だ。
モデルとコントローラを生成し、コントローラに scaffold :organization
を追加する。
% ruby script/generate model Organization
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/organization.rb
create test/unit/organization_test.rb
create test/fixtures/organizations.yml
exists db/migrate
create db/migrate/002_create_organizations.rb
% ruby script/generate controller organization
exists app/controllers/
exists app/helpers/
create app/views/organization
exists test/functional/
create app/controllers/organization_controller.rb
create test/functional/organization_controller_test.rb
create app/helpers/organization_helper.rb
% vi app/controllers/organization_controller.rb
class OrganizationController <
ApplicationController
scaffold :organization
end
これで、http://localhost:3000/organization/list でき、新しい組織も作ることが出来るようになった。
この後、組織と各ユーザを関連付ける。
% cp vendor/plugins/user_engine/app/models/user.rb app/models/
% vi app/models/users.rb
class User < ActiveRecord::Base
belongs_to :organization
include LoginEngine::AuthenticatedUser
include UserEngine::AuthorizedUser
# Returns the full name of this user.
def fullname
"#{self.firstname} #{self.lastname}"
end
end
% vi app/models/organization.rb
class Organization < ActiveRecord::Base
has_many :users
end
これで、各ユーザはある組織に所属することが出来るようになった。organization_id が NULL の場合は、無所属という事になる。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/12/07/986695/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。