Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:Activerecord集合关联模型_Ruby On Rails_Ruby_Activerecord_Ruby On Rails 4 - Fatal编程技术网

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顺序的结果