我的应用程序中有两个关联的表,我无法弄清楚如何将它们在Rails中连接在一起,下面是我的模型:
class Lead < ApplicationRecord
has_many :employee_leads
has_many :employees, :through => :employee_leads
end
class EmployeeLead < ApplicationRecord
belongs_to :employee
belongs_to :lead
end
class Employee < ApplicationRecord
has_many :employee_leads
has_many :leads, :through => employee_leads
has_many :emp_stores
has_many :stores, :through => emp_stores
end
class EmpStore < ApplicationRecord
belongs_to :store
belongs_to :employee
end
class Store < ApplicationRecord
has_many :emp_stores
has_many :employees, :through => :emp_stores
end
我的应用程序要求我找出每个销售线索所属的商店。我知道如何将线索带给员工,这是
Lead.joins(employee_leads: :employee)
我也知道如何将员工加入商店
Employee.joins(emp_stores: :store)
这些对我来说毫无问题。当我尝试将潜在客户加入存储时,我使用了:
Lead.joins(employee_leads: :employee { emp_stores: :store })
这给了我一个语法错误,我参考Active Record的link中有关加入嵌套关联(多级)的信息,但仍然无法弄清。我对此很陌生,请有人花点时间解释并帮助我。谢谢。
答案 0 :(得分:0)
尝试一下:
Lead.joins(employee_leeds: [employee: [amp_stores: :store] ])
我相信这些变体也应该起作用:
Lead.joins(employee_leeds: [{employee: [{amp_stores: :store}] }])
Lead.joins(employee_leeds: {employee: {amp_stores: :store} })
尽管如此,根据您的使用方式,您可能需要考虑使用includes
而不是joins
。联接是延迟加载的,而包含是快速加载的。
作为解释您的语法错误的原因……:something
是一个符号。在旧的(ruby 1.9之前的)世界中,哈希键/值对的编写方式如下::key => :value
。但是,从Ruby 1.9开始,提供了key: :value
的较新语法。
在尝试使之工作时,您有一个键/值对,其后(没有分隔符)后面是另一个哈希。为了修复它,您只需为第一个键提供一个值:
# Old syntax
:employee_leads => [ :employee => [ :emp_stores => :store ] ]
当您考虑使用哈希的新语法时,希望可以使其更合乎逻辑:
# New syntax
employee_leads: [ employee: [ emp_stores: :store ] ]