Rails - вопрос модельных ассоциаций - PullRequest
2 голосов
/ 24 мая 2011

У меня есть эти модели:

class Profile
  has_many :projects, :through => "teams"
  has_many :teams, :foreign_key => "member_id"
  has_many :own_projects, :class_name => "Project", :foreign_key => :profile_id
  has_many :own_teams, :through => :own_projects, :source => :teams
end

class Project
  belongs_to :profile, :class_name => "Profile"
  has_many :teams
  has_many :members, :class_name => "Profile", :through => "teams", :foreign_key => "member_id"
end

class Team
  belongs_to :member, :class_name => 'Profile'
  belongs_to :project
end

Я хочу создать модель Evaluation.Для этого потребуется идентификатор владельца проекта, идентификатор участника этого проекта и идентификатор проекта.Объясняя лучше, Владелец Проекта оценит всех своих участников, один за другим.И участники оценят просто владельца проекта.Таблица Evaluation будет иметь много атрибутов плюс те идентификаторы, которые упоминались ранее.

Мой вопрос: как бы мои модели работали с оценкой и как бы выполнялась сама оценка модели?has_and_belongs_to_many или has_many :through?

Спасибо.

Отредактировано

Выстрел в темноте

class Evaluations < ActiveRecord::Base
  belongs_to :evaluated, :class_name => 'Profile', :foreign_key => "evaluated_id"
  belongs_to: :evaluator, :class_name => 'Profile', :foreign_key => "profile_id"
end

Угадай, яне потребуется идентификатор из проекта ...

1 Ответ

0 голосов
/ 24 июля 2012
  1. Владелец проекта оценивает эффективность участника проекта
  2. Участники будут оценивать владельца проекта за его работу над проектом
  3. Итак, в Evaluation есть оценщик, evaluee, проект и другие атрибуты
  4. Нам также необходимо знать типы оценщиков и оценщиков

Создайте 2 класса оценки, один для EmployeeEvaluation, один для ManagerEvaluation. Использовать наследование одной таблицы.

class Evaluation < ActiveRecord::Base
  attr_accessible :evaluator, :evaluee
  belongs_to :project
end

class EmployeeEvaluation < Evaluation #project manager evaluation of employee
  def evaluator
    Manager.find(self.evaluator)
  end

  def evaluee
    Employee.find(self.evaluee)
  end
end

class ManagerEvaluation < Evaluation
  def evaluator
    Employee.find(self.evaluator)
  end

  def evaluee
    Manager.find(self.evaluee)
  end
end
...