2017-06-21 19 views
1

から数えるI持って、次のモデルRetriveレコードはhas_manyの関係

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のバーコードのレコードを抽出することができます。 Bookrackからバーコードレコードを抽出する簡単な方法はありますか?

答えて

1

これはおそらく助けるべきである。..

Bookrack.rbその後

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

あなたが行うことができ、

また
Bookrack.find(1).barcodes.count 

ことに注意することは、has_many関係が複数である必要があり、あなたのモデル不適切だと思われます。入力ミスならば修正してください。

+0

ありがとうございます。あなたは私の時間を節約する –

2

試しましたか? (最初のbookrackの最初の学部での最初の本のバーコードをカウントするなど):

b = Bookrack.first.faculties.first.books.first.barcodes.count 
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 
関連する問題