2014-11-10 3 views
0

pg_search gem을 사용하여 Rails 응용 프로그램에서 검색 기능을 구현하고 싶습니다. documentation에서 말하는대로 모든 것을 설정했습니다.Rails 출력 다형성 연관

def show 
    @pg_search_documents = PgSearch.multisearch(search_params) 
end 

자체가 작동 검색을하지만 내보기에 정말 짜증나는 문제가있다 : 그럼 쇼 조치 검색 컨트롤러을 설정했습니다. 내가하는 일은 항상 PgSearch :: Document 객체의 배열을 출력합니다. 난 단지 내 보기이 쓰기에도 :

<%= @pg_search_documents.each do |document| %> 
<% end %> 

나는이 (나는 그것을 단축 한) 얻을 :

[#<PgSearch::Document id: 2, content: "…", searchable_id: 28, searchable_type: "Vessel">, #<PgSearch::Document id: 3, content: "…", searchable_id: 27, searchable_type: "Vessel">] 

내가 pg_search가 의 다형성 연관을 설정 것을 알고있는 I 이전에는 결코 다루지 않았습니까? 문제가 될 수 있습니까? 원래 소스 모델에 도착하는 사전

+0

@blelump의 답변도 정확했지만 Todd의 답변을 수락했습니다. 미안하지만 하나 골랐어. –

+0

감사합니다. @ 불평에 대한 위로가 있다면, 나는 그의 대답에 대해 투표했습니다. –

답변

2
<%= @pg_search_documents.each do |document| %> 
<% end %> 

이것은 고전적인 오류입니다. 제가 레일즈를 처음 배울 때 당황한 것을 기억합니다. 실수는 과 each을 사용하는 것입니다. each의 반환 값은 반복되는 배열 (이 경우 @pg_search_documents)이며 <%=을 사용하면 Rails가 해당 배열에서 문자열을 생성하여보기에 삽입하도록 지시합니다. 이는 일반적으로 여러분이 원하는 것이 아닙니다 : 당신은 each으로 전달하는 블록 안의 코드에 의해 뷰가 생성되기를 원합니다.

대신 <% @pg_search_documents.each do |document| %>을 사용하면 (= 생략) 배열의 내용이 덤프되는 것을 방지 할 수 있습니다.

@ble 럼프가 제안하는대로 .searchable을 사용해야 할 수도 있지만, 일반적인 함정이기 때문에 질문의 나머지 절반에 답변하고 싶습니다.

1

에서

덕분에, searchable 호출은 예를 들어, 이러한 검색 결과 레코드에 필요한 :

<% @pg_search_documents.each do |document| %> 
    <%= document.searchable %> 
<% end %> 

또한 내 소스 모델로 다시 전환 할 수 있습니다 제어기는 예를 들어 :

@pg_search_documents = PgSearch.multisearch(search_params).collect(&:searchable) 

그리고, @pg_search_documentsVessel 요소를 포함한다.