改善页面加载时,公司有许多用户,我想在同一页上显示我所有的公司和用户



我有两个模型,CompanyUser。一个Company有多个Users

在我的一个页面上,我想在一个页面上显示我所有的公司和用户:

<% @companies.each do |c| %>
  <%= c.name %>
  <% c.users.each do |u| %>
     <%= u.name %>
  <% end %>
<% end %>

唯一的问题是,页面开始需要15-30秒至少加载,因为我有这么多的公司和用户附加到公司。我目前的解决方案是O(n^2)(如果我错了请纠正我),所以这个解决方案只会随着样本的增长而变得更糟。

是否有提高性能的好方法?每天都有新用户添加到公司,所以我考虑缓存一个散列,以公司id作为键,以用户数组作为值。这是一个可行的解决方案吗?

你想使用即时加载

http://guides.rubyonrails.org/active_record_querying.html eager-loading-associations

简而言之,如果您在控制器中执行Company.includes(:users).find(2)之类的操作,它将执行两个查询—一个用于加载公司,另一个用于同时加载所有用户。然后,您可以安全地遍历视图中的用户,而不会产生任何额外的性能开销。

这也适用于有公司关系的情况。Company.includes(:users).where(active: true)。它将在两个查询中加载所有活动公司和所有公司的所有用户。

最新更新