Ruby嵌套数组迭代的复杂性

时间:2015-08-17 10:34:57

标签: ruby-on-rails arrays ruby nested time-complexity

我正在编写简单的Rails应用程序,我希望得到一组用户评分的书籍,但速率必须是>现在我想知道我的查询的复杂性:

@ratedBooks = Book.all.select { |book| @user.ratings.select { |rate| rate.rate != 0 }.map { |rate| rate.book }.include? book }

是n ^ 2还是Ruby正在为每本书评估内部数组?我可以更快地完成吗?

3 个答案:

答案 0 :(得分:1)

你可以尝试这个

Book.joins(:ratings).where('ratings.rate>0')

所以你得到所有评级都高于0的书

答案 1 :(得分:1)

是的,您的代码非常无效,因为它会在应用中进行所有过滤。您可以让DB完成工作:

Rating.joins(:book).includes(:book)
      .where(user: current_user)
      .where('rate > 0')
      .map(&:book)

答案 2 :(得分:1)

要从用户评分的图书中检索所有评分,您可以使用:

@user.ratings.includes(:book).where("ratings.rate != ? and ratings.book_id", 0, book.id)