Rails与哪里查询不同

时间:2013-11-17 21:33:04

标签: ruby-on-rails ruby-on-rails-4

我使用以下代码在视图上显示不同的用户计数:

<%= @miniature.collections.where(status: 'Got').count(:user_id, distinct: true) %> users have this

然后我尝试列出那些不同的用户,但无法弄清楚如何将(:user_id, distinct: true)合并到此查询中:

<% @miniature.collections.where(status: 'Got').each do |collection| %>
        <tr><td><%= link_to collection.user.name, collection.user %></td></tr>
<% end %>

我只是无法让它发挥作用。

2 个答案:

答案 0 :(得分:0)

如果您想查找具有“已获取”状态微缩模型的所有用户,则最好从另一侧开始。

控制器:

@miniature = Miniature.find(...)
@users = User.joins(:collections).where(collections: {status: 'Got', miniature: @miniature})

查看:

<%= @users.count %> users have this
<% @users.each do |user| %>
  <tr><td><%= link_to user.name, user %></td></tr>
<% end %>

答案 1 :(得分:0)

在@ immaculate.pine的帮助下,我找到了一种方法,使用.uniq而非(:user_id, distinct: true)

在控制器中我有

@miniature = Miniature.find(params[:miniature_id])
@usergot = User.joins(:collections).where(collections: {status: 'Got', miniature: @miniature}).uniq
@userwant = User.joins(:collections).where(collections: {status: 'Want', miniature: @miniature}).uniq

然后为了计数我只需要打电话

<%= @usergot.count %>
 users have this

或确实

<%= @userwant.count %>
         users want this

并且列表是

<% @usergot.each do |user| %>
        <tr>
            <td><%= link_to user.name, user %></td></tr>
      <% end %>

完美而不太难看。

相关问题