Activerecord 按Rails中的关联模型字段筛选集合

Activerecord 按Rails中的关联模型字段筛选集合,activerecord,ruby-on-rails-4,Activerecord,Ruby On Rails 4,我有以下两种型号: class Author < ActiveRecord::Base has_many :books end class Book < ActiveRecord::Base belongs_to :author end 我想用独特的作者筛选这个集合。不从集合中选择唯一作者。仅收集具有作者身份栏独特价值的书籍 upd: 例如,我有收藏 > #<ActiveRecord::Relation [#<Book id: 1, title

我有以下两种型号:

class Author < ActiveRecord::Base
    has_many :books
end

class Book < ActiveRecord::Base
    belongs_to :author
end
我想用独特的作者筛选这个集合。不从集合中选择唯一作者。仅收集具有作者身份栏独特价值的书籍

upd: 例如,我有收藏

> #<ActiveRecord::Relation 
[#<Book id: 1, title: "Tails", author_id: 1>,
<Book id: 2, title: "Tails part 2", author_id: 1>,
<Book id: 3, title: "Tails part 3", author_id: 1>,
<Book id: 4, title: "Stories part 1", author_id: 5>,
<Book id: 5, title: "Stories part 2", author_id: 5>]> 
应该是这样的:

> #<ActiveRecord::Relation [
<Book id: 1, title: "Tails", author_id: 1>,
<Book id: 4, title: "Stories part 1", author_id: 5>
]>

实现这一点最直接的方法是首先找到您要过滤的作者ID

author\u id=author.wherefirst\u name:'Deborah'。采摘:id

假设author_id现在包含数组[1,2,3]。现在,您可以使用此作者ID数组查找具有这些作者的书籍

Book.where作者id:作者id

这可以理解为,查找作者id在此id列表中的书籍。生成的SQL将是:

从books.author\u id位于1、2、3中的books中选择books.*

编辑:

在问题作者澄清后,我认为这是需要的:


预订。选择“作者id不同*”

Thnaks作为您的答案。但这并不是我想要的。也许我的问题不太清楚。请参阅更新。我更新了我的答案。让我知道这是否是你要找的。那么你想为每个作者列出一本任意的书吗?是的。我认为这是正确的
> #<ActiveRecord::Relation [
<Book id: 1, title: "Tails", author_id: 1>,
<Book id: 4, title: "Stories part 1", author_id: 5>
]>