控制数组样本的内容

时间:2018-11-14 17:28:05

标签: ruby-on-rails ruby

我收藏了books。在我看来,我想从数据库中的前10本畅销书中随机抽取5本。但是,我只希望该示例中最多显示一个非小说类标题(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 :(得分:1)

如果要执行复杂的结果,有时最好不要在一个查询中全部完成。与简单的逻辑相比,维护起来要困难得多。但是,在可维护性,可伸缩性和性能方面绝对是一个平衡。

我建议做这样的事情:

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'])

这是未经测试的代码。只是给您一个有关如何实现目标的想法。