Rails 4 - 如何从 "has_many -> belongs_to" 关系中获取所有公司的列表?

Rails 4 - How to get list of all companies from the "has_many -> belongs_to" relation?

我有这样的模型结构:

class OrganizationBlast < ActiveRecord::Base
  has_many :organization_blast_companies
end
class OrganizationBlastCompany < ActiveRecord::Base
  belongs_to :organization_blast
  belongs_to :company
end

我如何获得所有公司的列表? 到目前为止,我是这样做的:

organization_blast             = OrganizationBlast.find(params[:id])
organization_blast_companies   = organization_blast.organization_blast_companies.includes(:company)
organization_blast_companies.each do |organization_blast_company|
  puts organization_blast_company.company.name
  ...

我同意这里的命名约定很疯狂。

但是,有没有更好的方法获取组织blast中的公司列表?

谢谢

我认为您正在寻找 has_many :through 协会。

如下所示设置模型:

class OrganizationBlast < ActiveRecord::Base
  has_many :organization_blast_companies
  has_many :companies, through: :organization_blast_companies
end
class OrganizationBlastCompany < ActiveRecord::Base
  belongs_to :organization_blast
  belongs_to :company
end

class Company < ActiveRecord::Base
  has_many :organization_blast_companies
  has_many :organization_blasts, through: :organization_blast_companies
end

然后,只需调用 organisation_blast.companies 即可获取与 OrganizationBlast 对象关联的所有公司。

organization_blast = OrganizationBlast.find(params[:id])
organization_blast_companies = organization_blast.companies

参考:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

希望对您有所帮助:)