从has_many关系中检索记录计数

时间:2017-06-21 02:58:32

标签: ruby activerecord rails-activerecord

我有以下型号

Bookrack.rb
has_many :faculties

Faculty.rb
belongs_to :bookrack
has_many :books

Book.rb
belongs_to :faculty
has_many :barcodes

Barcode.rb
belongs_to :book

我有一个控制器名称书架控制器。我可以使用循环和空数组提取Bookrack中条形码的记录。有没有更简单的方法从Bookrack中提取条形码记录。

3 个答案:

答案 0 :(得分:2)

您是否尝试过这种方法(例如,计算第一个书架中第一批教师的第一本书的条形码):

b = Bookrack.first.faculties.first.books.first.barcodes.count

答案 1 :(得分:1)

这应该有帮助..

Bookrack.rb

has_many :faculties
has_many :books, through: :faculties
has_many :barcodes, through: :books

然后就可以了,

Bookrack.find(1).barcodes.count

另外要注意的是,has_many关系必须是复数,你的模型似乎不合适..如果它是一个错字就纠正它。

答案 2 :(得分:1)

使用类似的模型关系:

# app/models/bookrack.rb
has_many :faculties

# app/models/faculty.rb
belongs_to :bookrack
has_many :books

# app/models/book.rb
belongs_to :faculty
has_many :barcodes

# app/models/barcode.rb
belongs_to :book

您可以以“嵌套”方式使用joins

Bookrack.joins(faculties: [books: :barcodes]).count
# => SELECT COUNT(*) FROM "bookracks" 
#    INNER JOIN "faculties" ON "faculties"."bookrack_id" = "bookracks"."id" 
#    INNER JOIN "books" ON "books"."faculty_id" = "faculties"."id" 
#    INNER JOIN "barcodes" ON "barcodes"."book_id" = "books"."id"
# => 1