Ruby on rails RubyonRails:Activerecord集合关联模型
我有以下两种型号:Ruby on rails RubyonRails:Activerecord集合关联模型,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,我有以下两种型号: 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 available
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
available_bookshelves.each do |this_bookshelf|
this_bookshelf.books.each do |this_book|
process_isbn this_book
end
end
这将返回一个activerecord关系
要检索关系中的所有书籍,我将按如下方式循环该关系:
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
available_bookshelves.each do |this_bookshelf|
this_bookshelf.books.each do |this_book|
process_isbn this_book
end
end
我想要查询中的所有书籍,这样我就不必逐个返回收藏中的每个“书架”。这可以工作,但感觉冗长。我在应用程序的其他部分也执行了类似的查询循环
编辑:
澄清一下:有没有办法让所有书架上的所有书籍都符合特定的标准?
例如,如果有5个棕色书架,我们可以检索这些书架上的所有书籍吗?
类似(这不是有效代码)
brown_books=书架为棕色的图书您可以使用以下查询获取库存书架中的图书
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)
伟大的这似乎保留了Bookshelf.in_stock返回的ID顺序的结果