从多个表加载数据

时间:2013-02-28 20:17:20

标签: ruby-on-rails ruby-on-rails-3.2

所以我有一个这样的架构层次结构:

Organization > Program >RegistryPatientCount

因此RegistryPatientCount保留program_id字段以访问Program表。 (假设它还有一个名称列,用于类似的程序名称等。)

Program表保留organization_id字段以访问Organization表。

然后在我的controller#show方法中,我有类似的东西:

 respond_to :json

  def show
    #TODO: Pagination.
    @blah =  Program.includes([:registry_patient_counts]).where(organization_id: params[:id])

    respond_with(@blah)
  end

*注意:ID参数是organization_id。*

当我运行它时,它返回Program表中的数据,但我希望它返回 来自RegistryPatientCount表的数据,下一步是能够深入到Program表中而不是program_id能够从Program表中显示Name。

但是没有任何工作,就像我说它只返回给定组织的Program表数据。

2 个答案:

答案 0 :(得分:1)

你必须告诉respond_with它应该包含子元素。

respond_with(@blah, include: :registry_patient_counts)

Program.includes(...)只是告诉ActiveRecord使用一个查询获取所有数据。然后,您可以在控制器内部使用它,而无需执行额外的数据库查询。

respond withrender方法独立于此。它们通常只返回层次结构的第一级。

答案 1 :(得分:-1)

在irb或Rails控制台(rails c)中,您是否可以看到是否从“RegistryPatientCount”获取数据。 然后,如果这样可以将代码插入控制器或您执行此操作的位置。 假设您有模型并且字段名为“organization_id”,我会尝试这样做:

@blah = RegistryPatientCount.where(:organization_id => params [:id])