2

레일 응용 프로그램에서 has_many 선언에 : finder_sql 옵션을 사용했습니다. 레일스 워드 프로세서는 이렇게 할 때 "find_in_collection이 추가되지 않았습니다."라고 말합니다. 이것은 무엇을 의미 하는가?제한 사항 : finder_sql

답변

3

그것은 당신이 같은 테이블 사이에 has_many 관계가있을 때 것을 의미한다 :

사람 has_many : 책을, : finder_sql

이 당신이 늘 당신이 normaly 얻었을 것 person.books.find *이 방법을 얻을

. 이 동작의 이유는 activerecord cant가 사용하려는 find * 메소드를 사용하여 finder_sql을 쉽게 작성할 수 있기 때.에 실제로 기능을 제공하지 못합니다.

3

즉, 인스턴스를 찾는 방법을 지원하지 않습니다 컬렉션 내에서. 문서는 find_in_collection (여기서 "collection"은 연결의 이름 임)이라고합니다. 예는 여기에 더 도움이 될 수 있습니다

class Author < ActiveRecord::Base 
    has_many :posts 

    has_many :special_posts, :class_name => "Post", 
      :finder_sql => "SELECT * FROM posts WHERE ..." 
end 

author.find_in_posts(30)   # it finds and returns post 30 
author.find_in_special_posts(30) # not supported because finder_sql is used here. 
+0

안녕 AVIT, 난 당신이 "컬렉션 find_in_collection 내에서 인스턴스를 찾기위한 방법"무슨 뜻인지 모르겠어요. 사실, 나는 그것을 어떻게 파싱하는지조차 확신하지 못했습니다. 그렇지 않으면, 예를 들어 Cyrik의 답변보다 더 나은 답변을 얻었을 것입니다. Dan – allyourcode

+0

편집 됨 ... 이제 더 나을 것입니다. 실제로는 컬렉션의 이름을 기반으로 메타 프로 그래밍 된 메서드 일 때 문서에서 메서드가 호출 된 것을 말합니다. –