TodoList: ユーザの所属先2006年12月07日 13時34分10秒

さて、次にユーザを所属によって分けてみたいと思う。group だと Todo を分けるのか、ユーザを分けるのかが混乱しやすくなりそうなので、organization を使う。

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の入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

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

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

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/12/07/986695/tb

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