导出到excel

时间:2015-08-12 11:41:38

标签: ruby-on-rails ruby activerecord

我需要在excel中导出数据库中的一些数据。

一个人可以链接到多个组织,我需要获取他们所链接的组织的通信详细信息。

目前我正在检查我的表格OrganisationContacts哪些组织与哪个联系人相关联。

这会返回一组与该人相关联的组织对象。

然后我遍历这些组织并使用communication_id,以便找到与该组织相关联的正确通信详细信息。

最后一步是循环遍历通信对象数组并以电子邮件为例。

最后一步是它出错了。我一直得到(未定义的方法`tel'代表#)。

当我检查元素时,我在excel文件中得到了这个: orgrow.inspect =>

Communication id: 12048, tel: "+32 2 552 60 00", fax: "+32 2 552 60 01", gsm: "", email: "kabinet.bourgeois@vlaanderen.be", website: "", other: "Kabinet van de minister-president van de Vlaamse re...", created_at: nil, updated_at: "2014-09-15 14:00:11", contact_id: nil, organisation_id: 1564, organisationcontact_id: nil

所以我应该能够得到.tel,对吧?

日志让我觉得我正在对数组执行方法,而不是对象本身,但不应该这样。

这是我目前的代码:

<% @org_row = [] %>

  <ss:Cell><ss:Data ss:Type="String">

    <% @org_ids.each do |orgid| %>
      <% if orgid.to_i > 0 %> <% @org_row << Communication.all(:conditions => {:organisation_id => orgid.to_i }) %>
      <% end %>
    <% end %>

  <% @org_row.each do |orgrow| %>
    <%= orgrow.tel %>
  <% end %>
</ss:Data></ss:Cell>

2 个答案:

答案 0 :(得分:1)

这里需要一个Active Record。在模型上使用.all,您将获得数组中的集合。所以改变你的查询

Communication.first(:conditions => ["organisation_id => ?", orgid.to_i])

答案 1 :(得分:1)

您有一个n + 1查询问题,使用此代码执行与组织数量一样多的查询,您必须避免这种情况,您应该首先在查询中查询关联(查询@org_ids)这是我要做的(你没有给我们这个查询,所以我将不得不做一些假设..):

@org = OrganisationContacts.all.includes(:communication)

您现在可以

<% @org.each do |org| %>
  <% @org.communication.each do |comm| %>
    <%= comm.tel %>
  <% end %>
<% end %>

如果您想要更精确的anwser,请向我们提供OrganisationContacts的详细信息以及您对@org_ids的查询