rails在具有相似字段的两个表之间连接查询

时间:2015-06-27 18:32:01

标签: sql ruby-on-rails

我有3个模特

class Company < ActiveRecord::Base
  has_many : CompanyAccount
  has_many : CompanyContact
end

class CompanyContact < ActiveRecord::Base
  belongs_to : Company
end

class CompanyAccount < ActiveRecord::Base
  belongs_to : Company
end

由于CompanyAccount和CompanyContact模型都属于公司模型,因此它们具有相似的&#34; company_id&#34;领域。我通过查询检索了一些帐户:

@CompanyAccounts = CompanyAccount.where.not(balance:nil)

现在,使用公共的company_id字段,我试图从我的CompanyContacts表中检索属于与我上面查询的CompanyAccounts相关联的同一公司的所有数据(换句话说,我试图获取具有同一家公司_id)。我已经多次尝试使用&#34;加入&#34;但到目前为止一切都失败了任何人都可以在这个背景下给我什么是合适的语法?感谢。

1 个答案:

答案 0 :(得分:0)

首先,请注意正确的Ruby命名约定。 Ruby类和模块应该使用CamelCase,而符号,方法和变量都应该使用snake_case。鉴于此,我将重新编写您的模型如下

class Company < ActiveRecord::Base
  has_many: company_accounts
  has_many: company_contacts
end

class CompanyContact < ActiveRecord::Base
  belongs_to: company
end

class CompanyAccount < ActiveRecord::Base
  belongs_to: company
end

现在,问你的问题。我会使用includes急切加载关联公司及其相关联系人。例如

@company_accounts = CompanyAccount.includes(company: :company_contacts).where.not(balance: nil)

这将为每个有余额的公司帐户做什么,它会将其关联公司和公司的相关联系人加载到内存中,以便您可以访问它

@company_accounts.each do |account|
  # access to the company
  account.company

  # access to the company's contacts
  account.company.contacts
end

希望这有帮助。