首页 > 解决方案 > 如何通过 ActiveRecord 中的关系显示 has_many 中的非唯一记录?

问题描述

在我的 Rails 应用程序中,我有以下关系:


class Company < ApplicationRecord

  has_many :people, :through => :jobs

end

class Job < ApplicationRecord

  belongs_to :company
  belongs_to :person

end

class Person < ApplicationRecord

  has_many :companies, :through => :jobs

end

如何生成所有人的列表,包括 他们各自的公司名称,所以输出是这样的:

(请注意,有些人可能会多次出现在列表中,因为他们可能属于多家公司。)

现在我在我的 Person 模型中有这个类方法,但是它只返回人的唯一名称,这不是我想要的:

def self.options
  all.map{ |p| [ p.name, p.id ] }
end

标签: ruby-on-railsactiverecord

解决方案


是的,你可以通过使用这一堆代码来做到这一点..

<% Person.includes(:companies).each do |person| %>
    <% person.companies.each do |company| %>
        <%= person.name %> <%= "(#{company.name})" %>
    <% end %>
<% end %>

推荐阅读