Определение атрибута для отношения has_and_belongs_to_many в рельсах - PullRequest
0 голосов
/ 01 марта 2012

Допустим, я хочу создать базу данных готовых проектов кодирования, разработчиков и их ролей.

Модели выглядят так:

project has_and_belongs_to_many developers
developers has_and_belongs_to_many projects

Таблица developers_projects выглядит следующим образом:

int: developer_id, project_id
string: role

Позвольте мне иметь 3 разработчика и 2 проекта с соответствующими идентификаторами и именами:

1, Ashley
2, Bob
3, Charles

1, Tic Tac Toe
2, Snake

И их действительные роли

Project 1:
- Manager: Ashley
- Coder: Bob, Charles

Project 2:
- Manager: Charles
- Coder: Ashley

Это так?Можно ли определить объекты менеджеров и кодировщиков по проектам?

например:

class Project < ActiveRecord::Base
    has_and_belongs_to_many :developers
    has_and_belongs_to_many :managers, :class_name => "developers", :condition => "role = 'manager'"
    has_and_belongs_to_many :coders, :class_name => "developers", :condition => "role = 'coder'"
end

(это не работает)

Заранее спасибо,

1 Ответ

2 голосов
/ 01 марта 2012

has_and_belongs_to_many позволяет создавать таблицы объединения без объявления модели.Если вы хотите иметь атрибут в этой таблице, вы должны создать отдельную модель, например, ProjectRoles в вашем случае:

class ProjectRole < ActiveRecord::Base
  belongs_to :developer
  belongs_to :project

  attr_accessible :role
end

class Project < ActiveRecord::Base
  has_many :manager_roles, :class_name => "ProjectRole", 
                           :conditions => { :role => 'manager' }
  has_many :managers, :through => manager_roles
end

class Developer < ActiveRecord::Base
  has_many :project_roles
  has_many :projects, :through => project_roles
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...