как добавить uniq в запрос - PullRequest
       1

как добавить uniq в запрос

1 голос
/ 22 сентября 2019

в виду, у меня есть это

<div>
    <% @readers.each do |reader| %>
        <% user_profile_url = user_url(reader.user.username) %>
        <div>
            <%= link_to user_profile_url do %>
                    <%= reader.user.username %>
            <% end %>
            <span>[<%= reader.created_at.to_date %>]</span>
        </div>
    <% end %>
</div>

в books_controller У меня есть это

  def readers_list
    @book = Book.find(params[:id])
    @readers = @book.downloads.order(created_at: :desc)
  end

У меня есть эта проблема: если пользователь загружает книгу, в этом списке я вижуимя пользователя twince.Итак, я знаю, я должен добавить uniq

Я пытался добавить его в конце @readers, но это не сработало. Как (и где) его добавить?!

Я также пытался сделать это @readers = @ book.downloads.where (user_id: params [: user_id]). Order (made_at:: desc), но это не сработало.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2019

Используйте DISTINCT вместо uniq.Поскольку вы получите все, а затем выполните uniq, это часто считается неэффективным:

book
  .downloads
  .select('distinct on (downloads.user_id) downloads.*')
  .order('downloads.user_id, downloads.created_at DESC')

downloads было ограничено предложением JOIN, поэтому в обеих таблицах присутствовал столбец create_at.отсюда явная ссылка как в select, так и в порядке.

0 голосов
/ 22 сентября 2019

Другой альтернативой является использование «Группировать по», в рельсах это можно сделать следующим образом:

@book.downloads.order(created_at: :desc).group(:user_id)

Если вы хотите проверить, что быстрее, «DISTINCT» или «GROUP BY», тогда Здесь - хорошее место для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...