Контролировать содержимое образца массива - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть коллекция books.На мой взгляд, я хочу показать случайную выборку из 5 книг из 10 самых продаваемых книг в моей базе данных.Тем не менее, я хочу, чтобы в этом примере отображалось не более ОДНОГО неигрового заголовка (book.genre).Это нормально, если не сэмплированы научно-популярные книги.

Контроллер:

def index 
  @top_selling_books = Book.all.order('units_sold DESC').first(10).sample(5)
end

Просмотр:

<% @top_selling_books.each.with_index(1) do |book, index| %>
  <div>
    <%= render "books/top_sellers", book: book, index: index %>
  </div>
<% end %>

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы хотите получить сложные результаты, иногда лучше не делать все это в одном запросе.Это может быть намного сложнее поддерживать, чем простая логика.Однако определенно существует баланс между удобством обслуживания, масштабируемостью и производительностью.

Я бы предложил сделать что-то вроде этого:

def top_books(limited_genres: [])
  non_limited_books = Book.where.not(genre: limited_genres).order('units_sold DESC').first(10).sample(5)
  limited_books = Book.where(genre: limited_genres).order('units_sold DESC').first(5).sample(1) # rename to limited_book if sample is kept to 1
  (top_books + limited_books).sort_by(:units_sold)[0..5]
end

@top_selling_books = top_books(limited_genres: ['non-fiction'])

Это не проверенный код.Это просто чтобы дать вам представление о том, как достичь ваших целей.

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