繁体   English   中英

如何从中获取最新记录有很多关系

[英]ruby on rails how to get latest records from has many relationship

我是Ruby on Rails的新手。 我有一个问题-如何仅从模型中有很多关系的最新记录中获取数据。 我的代码是这样的:

class User < ActiveRecord::Base 
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :user

  scope :rating, -> { where(rating: 5) }
end

我想要实现的是:我想为每个用户获取所有最新(最新)的书,而不是使用范围等级过滤这些书。 我可以为每个循环使用此方法(遍历User.books并获取book.last)-但这效率很低,因为我有很多数据。 您有任何想法我该怎么做吗? 也许某种范围相互链接?

如果要避免编写SQL,可以执行以下操作:

class Book < ActiveRecord::Base
  scope :latest, -> do
    book_ids_hash = Book.group(:user_id).maximum(:id)
    book_ids = book_ids_hash.values
    where(id: book_ids)
  end
end

然后,您要做的就是:

Book.rating.latest

尝试这个:

User.find_each do |user|
  puts 'User top 10 books:'

  user.books.rating.order('id DESC').limit(10).each do |book|
    puts book.title 
  end
end

我想为每个用户获取所有最新(最新)的书

在上面的示例中,请注意.order('id DESC').limit(10) 这将按ID降序对书籍进行排序。

每位用户一本书,然后将结果限制为评分为5的用户,一个查询无循环或任何问题。

Book.order(created_at: :desc).group(:user_id).rating

只需使用last方法,然后将所需的记录数传递给参数:

user.books.last(5).rating

这将为您提供最后5本书,并对其应用评分。

参见http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-last

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM