帮助在Rails中构建模型

class Profile has_many :projects, :through => "teamss" 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 。 我想要做的是在project#view页面中为project#view的每个成员(包括所有者)生成一个链接,以便进行Evaluation此人将点击该链接并评估与此链接相关的人员。 Project业主将评估所有成员,所有成员将评估所有者。

我已经定义了模型Evaluation如下,但我想我错过了一些东西:

 class Evaluations  'Profile', :foreign_key => "evaluated_id" belongs_to: :profile, :class_name => 'Profile', :foreign_key => "profile_id" end 

记住Evaluation表将有大量属性,这就是为什么我不打算使用has_many_and_belongs_to_many

我怎样才能创建这个模型以便做我想做的事情并且能够通过project#show #show page获取我所需要的一切?

谢谢!

编辑

完成的更改:

 class Profile has_many :evaluations, :dependent => :destroy, :foreign_key => :evaluation_id has_many :evaluators, :through => :evaluations, :foreign_key => :profile_id end class Project has_many :evaluations,:foreign_key => "project_id" end class Evaluations  'Profile', :foreign_key => "evaluated_id" belongs_to: :profile, :class_name => 'Profile', :foreign_key => "profile_id" belongs_to: :project, :class_name => 'Project', :foreign_key => "project_id" end 

您的团队和个人资料(成员)协会有点搞砸了。 团队有很多个人资料(成员),个人资料(成员)属于团队。 除此之外,你可能只是过于复杂化了。 我很好奇为什么你不会只调用Profile Model会员并让事情变得更简单?

话虽这么说,你正在做一组非常复杂的关联。 我强烈建议您仔细阅读ActiveRecord Associations文档 ,以便深入了解这些内容的工作原理,尤其是主键和外键如何自动确定。

我想以下会得到你想要的。

 class Team has_and_belongs_to_many :members, :class_name => "Profile" belongs_to :project belongs_to :team_leader, :class_name => "Profile" end class Profile has_and_belongs_to_many :teams has_many :projects, :through => :teams has_many :owned_projects, :class_name => "Project", :foreign_key => "owner_id" has_many :owned_teams, :class_name => "Team", :foreign_key => "team_leader_id" has_many :evaluations has_many :evaluations_given, :class_name => "Evaluation", :foreign_key => "evaluator_id" end class Project has_many :teams belongs_to :owner, :class_name => "Profile" has_many :members, :through => :teams has_many :evaluations end class Evaluation belongs_to :profile belongs_to :evaluator, :class_name => "Profile", :foreign_key => "evaluator_id" belongs_to :project end 

支持这些模型定义的是以下表/键:

 evaluation id profile_id evaluator_id project_id teams id project_id team_leader_id profiles id project id owner_id profiles_teams profile_id team_id 

有了这个,您应该能够访问所需的集合/对象以获得正确的链接,例如:

  • project.members

    项目拥有者

    project.teams

    team.project

    profile.projects

    profile.owned_projects

    profile.teams

    团队成员

    队长

    project.evaluations

    profile.evaluations

    evaluation.evaluator

    profile.evaluations_given

另请注意,如果您尝试使用RESTFUL框架,那么嵌套资源将同样复杂。 读起来!