def reports
sql = "select username, email, sign_in_count, current_sign_in_at, \
(select count(*) from foo ft where ft.user_id = u.id and ft.state in ('complete', 'active', 'win', 'lose')) as foo_state, \
(select count(*) from bar where creator_id = u.id and m.state not in ('new','cancelled')) as bar_created, \
from users u where sign_in_count > 0 order by foo_state desc;"
@users = ActiveRecord::Base.connection.execute(sql)
end
所以,这个查询有点拙劣,只是为了向你展示一些东西,但没有打扰你的细节。此查询采用几个不同的表,查询它们,并基本上返回一个新表。我使用postgreSQL,因此返回一个PG::Result
对象。我可以调用@users.values
来获取一组数组,但我想知道是否还有更多的数据库。这样做的方法吗?
我想在视图中做这样的事情:
<%= render partial: 'users/shared/user', collection: @users, as: :user %>
但由于它不是一个真正的ActiveRecord对象,我似乎无法做到这一点(虽然如果我尝试它不会抛出错误,它只是没有显示任何东西)
ARel可以完成这样的壮举吗?我问得太多了吗?谢谢!
对于其他任何绊脚石的人......这至少可以获得你的信息:
<table>
<thead>
<tr>
<% @users.fields.each do |f| %>
<th><%= f %></th>
<% end %>
</tr>
</thead>
<tbody>
<% @users.values.each do |v| %>
<tr>
<% v.each do |a| %>
<td><%= a %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>