2013-11-17 6 views
0

я использовал следующий код, чтобы показать различные счетчики пользователей на вид:Rails отчетливый запрос с тем, где

<%= @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 %> 

я просто не совсем заставить его работать.

ответ

0

С помощью @ immaculate.pine я разработал способ сделать это с помощью .uniq, а не (:user_id, distinct: true)

В контроллере I имеют

@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 %> 

работает идеально и не слишком уродливым.

+1

К сожалению, я думал, что вы хотите найти миниатюры «Got» и «Want» из описания. И да, я забыл об уникальности. Рад, что я помог вам найти правильное решение. –

0

Если вы хотите найти всех пользователей, у которых есть миниатюры с статусом «Got», лучше начать с другой стороны.

Контроллер:

@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 %> 
+0

Звучит хорошо. Дело в том, что я хочу быть в состоянии сделать это на той же странице с обоими статусами: «Got» и: статус «Want», и таким образом ограничит меня одним правом? – Ossie

+1

Вы можете изменить условие на статус: ['Got', 'Want'] '. Результирующий запрос: '@users = User.joins (: collections) .where (collections: {status: ['Got', 'Want'], miniature: @miniature})'. –

+0

Я не вижу, как это решает проблему, которую я боюсь. Это просто возвращает смешанный список Got и Want и теряет отчетливый. У меня есть этот бит, работающий сейчас, определяя usergot и userwant, но тогда я не могу заставить это работать вообще в следующем списке. Я хочу получить списки отдельных пользователей с коллекциями статуса Got и Want, из которых у них может быть много. Я буду продолжать. – Ossie

Смежные вопросы