我有以下两种模式:
class Bookshelf < ActiveRecord::Base
has_many :books
scope :in_stock, -> { where(in_stock: true) }
end
class Book < ActiveRecord::Base
belongs_to :bookshelf
end
我想找到书架上所有的书,根据书架表上的一栏有效地找到书。目前,我必须按以下方式遍历每一位成员:
available_bookshelves = Bookshelf.in_stock
这将返回一个activerecord关系来检索关系中的所有书籍,我正在循环遍历该关系,如下所示:
available_bookshelves.each do |this_bookshelf|
this_bookshelf.books.each do |this_book|
process_isbn this_book
end
end
我希望查询中的所有书籍,这样我就不需要遍历每个“书架”从收集返回个别。这是可行的,但感觉很冗长。我有其他部分的应用程序,其中类似的查询-循环正在执行。
编辑:
澄清一下:是否有办法让所有书架上的书都符合一定的标准?例如,如果有5个棕色书架,我们能检索这些书架上的所有书吗?类似于(这是无效代码)的brown_books =书架呈棕色的书籍
发布于 2014-02-04 05:04:25
您可以使用以下查询获取库存图书货架上的书籍
available_books = Book.where(bookshelf_id: Bookshelf.in_stock.select(:id))
它将运行一个查询,如下所示:
SELECT books.*
FROM books
WHERE books.bookshelf_id IN (SELECT id FROM bookshelves WHERE in_stock = true)
https://stackoverflow.com/questions/21545495
复制