次のような単純なケースを想像してみてください。
class Book
has_many :chapters
end
私のコントローラーで次のようなことをしたとしましょう。
book = Book.find(:first,
:include => :chapters,
:conditions => ['chapters.title = ?', "In the beginning"]
ここで、チャプターを表示したいとします。データベースに再度アクセスせずに、Railsのチャプターに対処するにはどうすればよいですか?私がこのようなことをした場合:
chapters = book.chapters.select{|chapter| chapter.title == "In the beginning"}
Railsは、すべてのチャプターのデータベースを再ヒットして、それらをスキャンできるようにします。さらに悪いことに、コントローラーコードですべてのチャプターを再度スキャンする必要がありますか?
そして、次のようなfindを使用するもののようです。
chapters = Chapter.find_by_book_id_and_title(book.id, "In the beginning")
チャプターがすでにキャッシュされている場合でも、データベースが再度ヒットします。