我有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;但到目前为止一切都失败了任何人都可以在这个背景下给我什么是合适的语法?感谢。
答案 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
希望这有帮助。