RoR has_many通过额外的字段访问

时间:2012-05-18 13:45:38

标签: ruby-on-rails

我有3个表:employeesprojectsteams

Employee has_many :projects, :through => :teams
Project has_many :employees, :through => :teams

我将roles_id列添加到了team表。

Team belongs_to :role

现在我列出了项目,团队成员和他们的角色。

<% @project.employees.each do |employee| %>
  <tr>
    <td><%= employee.employee_full_name %></td>
    <td><%= employee.team.role.rolecode %></td>

但是,角色线不正确。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

roles_id => role_id?)或belongs_to :role, :foreign_key => "roles_id"

答案 1 :(得分:0)

您的代码有两个问题:

  1. 您的关联不完整。见this explanation 解释了如何建模has_many :through;

  2. employee has_many teams,所以你不能说employee.team

  3. 第一个问题的解决方案是您必须定义以下关联:

    class Employee
      has_many :teams
      has_many :projects, :through => :teams
    end
    
    class Project
      has_many :teams
      has_many :employees, :through => :teams
    end
    
    class Team
      belongs_to :role
      belongs_to :employee
      belongs_to :project
    end
    

    至于你的第二个问题:一个员工可以属于多个团队,所以你不能做employee.team。你只能employee.teams。解决方案是改变你的迭代:

    <% @project.teams.each do |team| %>
      <tr>
        <td><%= team.employee.employee_full_name %></td>
        <td><%= team.role.rolecode %></td>