我有以下设置: 公司has_many:地点 位置belongs_to:公司
当我致电Company.includes(:locations)时,我将公司退回,但没有相关的位置。
感谢任何想法!
答案 0 :(得分:1)
我不确定您要对公司做什么,但如果您想要一家公司及其位置,您通常会执行以下操作:
class Company
has_many :locations
end
class Location
belongs_to :company
end
class CompaniesController < ApplicationController
def show
@company = Company.find(params[:id])
@locations = @company.locations
end
end
然后在show
视图中,您可以调用@locations.each do |location|
来迭代locations
答案 1 :(得分:1)
急切加载是必要的,因为它可以优化应用程序的性能并防止系统遇到N + 1查询问题。假设您的数据库中有3000家公司,那么您的数据库将充斥着3000 + 1个查询。所以在控制器中你可以实现它
@companies = Company.includes(:locations)
同样对于单一公司,您可以将其作为
@company = Company.includes(:locations).find(params[:id])
现在将急切加载位置,您可以将其作为
获取@companies.collect{ |company| company.locations }
OR
@company.locations
注意,您可以使用任何迭代器。我用过&#39;收集&#39;仅仅是为了详细说明。感谢
答案 2 :(得分:0)
我在尝试将查询中的数据作为JSON发回时遇到了这个问题。
@companies = Company.includes(:locations)
render :json => @companies.to_json( :include => [:locations] )
为我工作:)