首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails: Activerecord集合相关模型

Rails: Activerecord集合相关模型
EN

Stack Overflow用户
提问于 2014-02-04 06:32:37
回答 1查看 780关注 0票数 1

我有以下两种模式:

代码语言:javascript
代码运行次数:0
运行
复制
class Bookshelf < ActiveRecord::Base
    has_many :books
    scope    :in_stock, -> { where(in_stock: true) }
end

class Book < ActiveRecord::Base
    belongs_to :bookshelf
end

我想找到书架上所有的书,根据书架表上的一栏有效地找到书。目前,我必须按以下方式遍历每一位成员:

代码语言:javascript
代码运行次数:0
运行
复制
available_bookshelves = Bookshelf.in_stock

这将返回一个activerecord关系来检索关系中的所有书籍,我正在循环遍历该关系,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
available_bookshelves.each do |this_bookshelf|
    this_bookshelf.books.each do |this_book|
        process_isbn this_book
    end
end

我希望查询中的所有书籍,这样我就不需要遍历每个“书架”从收集返回个别。这是可行的,但感觉很冗长。我有其他部分的应用程序,其中类似的查询-循环正在执行。

编辑:

澄清一下:是否有办法让所有书架上的书都符合一定的标准?例如,如果有5个棕色书架,我们能检索这些书架上的所有书吗?类似于(这是无效代码)的brown_books =书架呈棕色的书籍

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-04 13:04:25

您可以使用以下查询获取库存图书货架上的书籍

代码语言:javascript
代码运行次数:0
运行
复制
available_books = Book.where(bookshelf_id: Bookshelf.in_stock.select(:id))

它将运行一个查询,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT books.*
FROM books
WHERE books.bookshelf_id IN (SELECT id FROM bookshelves WHERE in_stock = true)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21545495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档