나는 레일 3 웨이를 읽고 있었다 그리고 책에 설명 사항에 따라 CollectionAssociation.include?
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에 액세스 할 수 있는지 알고 있습니까?
통찰력있는 답변에 감사드립니다. 많은 것을 이해하는 데 많은 도움이되었습니다. –
그러나'include?'메소드가 DB에 충돌하는 시나리오는 여전히 남아 있습니까? –
'include?'(또는 배열에 작용하는 다른 어떤 메소드)는'chapters'가 아직로드되지 않은 경우에만 DB에 접근합니다. 'chapters'는 느린로드로 인해 처음으로 호출 할 때까지로드되지 않습니다. "처음으로 getter를 부를 때"라고 말했을 때, 나는 book.chapters를 호출했다. 이것은 book을 얻는 방법이다. – ronalchn