基本上使用ActiveRecord创建新表的SQL

时间:2014-03-20 20:18:15

标签: sql ruby-on-rails postgresql activerecord

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>

0 个答案:

没有答案