Rails。包括不返回关联

时间:2016-07-27 19:01:44

标签: ruby-on-rails activerecord include associations

我有以下设置: 公司has_many:地点 位置belongs_to:公司

当我致电Company.includes(:locations)时,我将公司退回,但没有相关的位置。

感谢任何想法!

3 个答案:

答案 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] )

为我工作:)