私はRails 3 Wayを読んでいて、の動作をチェックしていましたCollectionAssociation.include?
本の説明によると:
指定されたレコードが関連付けコレクションに存在するかどうか、および基になるデータベース テーブルにまだ存在するかどうかを確認します。
DBがチェックされているかどうかを確認するためにいくつかのテストを行いますが、チェックしていないようです。
> book = Book.first
=> #<Book id: 1, title: "Programming Ruby"...
> last_chapter = book.chapters.last
=> #<Chapter id: 2, title: "Chapter 2", book_id: 1,
> b.chapters.include?(last_chapter)
=> true
> last_chapter.destroy
DELETE FROM "chapters" WHERE "chapters"."id" = ? [["id", 2]]
=> #<Chapter id: 2, title: "Chapter 2", book_id: 1,
> b.chapters.include?(last_chapter)
=> true
> book.chapters.reload
=> [#<Chapter id: 1, title: "Chapter 1", book_id: 1,...]
> b.chapters.include?(last_chapter)
=> false
ソースコードを確認したところ、load_target if options[:finder_sql]
条件付きでレコードをロードしているように見える行が見つかりました。
レコードがDBに存在するかどうかを確認するためにDBがいつアクセスされるか知っていますか?