我需要在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>
答案 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
的查询