0

与えられた棚から本を選ぶ適切な方法は何ですか?

class Book < ActiveRecord::Base
    belongs_to :shelf
end

class Shelf < ActiveRecord::Base
    has_many :books
end

を使用Book.where(:shelf => shelf)すると、のような例外が発生しますno such column: book.shelf。私はそれを逆にすることができることを知っていshelf.booksますが、複数のオブジェクトでフィルタリングする必要がある場合、これは機能しません。私が見つけたのは、クエリは次のように見えるはずですBooks.where(:shelf_id => shelf.id)が、これはあまり乾燥していないか、少しでもかっこいいとは思えません。

4

2 に答える 2

1

結合またはインクルードを使用できます:

Book.joins(:shelfs) # will load all the Books that have one Shelf

Book.includes(:shelfs) # will load all the Books and Shelfs even if the book has no Shelf associated

# or beginning with a Shelf object:
@shelf.books # will return all Book where shelf_id = @shelf.id

精度が必要な場合/質問がある場合は、コメントすることを躊躇しないでください;)(「shelf.booksのように、複数のオブジェクトでフィルタリングする必要がある場合、これは機能しません」というフレーズを考えています。本当にわからない)

于 2012-11-19T22:13:20.433 に答える
0

リレーショナルドライについては、あるモデルから別のモデルへの参照がモデルの1つにカプセル化されている委任を確認してください。これが実際の問題の解決策であるかどうかについてはかなりの議論があります。私は個人的にはそれが可能であると信じていますが、自分で決めてください。記事は古いですが、古くはありません。

于 2012-11-19T22:18:07.617 に答える