2017-01-19 3 views
0

이것은 아마도 멍청한 것입니다. 나는 수색 양식을 만들고있다. pg_search 모델 및 컨트롤러 관계

pg_search_scope :search_full_text, 
       :against => :full_text, 
       :using => { 
        :tsearch => { 
         :prefix => true 
         } 
        } 

및 documents_controller.rb에서

가, 내가 가진 : 모델 document.rb에서

, 나는이 가지고

def find 
    $results = Document.search_full_text(params[:ch_acte][:text]) 
end 

을하지만 아무것도 데이터베이스에 보내 얻을 수 없습니다. 서버 로그는 말한다 : 메소드 모델의 pg_search_scope 컨트롤러에 메소드를 호출하는 것보다 다른

Started POST "/documents/find" for ::1 at 2017-01-19 08:48:07 +0100 
Processing by DocumentsController#find as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZkqVYMuqMqnUjLer/FVdBdtv4cycp71dXqPQw6j0mfHKX5ptin7p7YiYFj8bNtjciQDmHzbKtBnZoILpGGvl8Q==", "ch_acte"=>{"text"=>"complet", "words"=>"", #[cut for brievity]}, "commit"=>"Cherche"} 
Rendering documents/find.html.erb within layouts/messources 
Rendered documents/find.html.erb within layouts/messources (0.4ms) 
Completed 200 OK in 216ms (Views: 210.2ms | ActiveRecord: 0.0ms) 

,이 데이터베이스로 전송 얻을 내가 무엇을해야 하는가?

Document.search_full_text("esp")을 레일 콘솔에서 실행할 때 정상적으로 작동합니다.

UPDATE

나는 documents/find.html.erb이 추가 :

<% $results.each do |m| %> 
    <p>The id is <%= m.id %>.</p> 
<% end %> 

나는 그 이후에만 흰색 내 메뉴를 표시하는 페이지를 얻을, 그리고 ...

+1

documents_controller 질문에 documents_models.rb를 수정하십시오. –

답변

3

당신은 레일을 이해한다 가능한 공연을하려고 노력한다. 검색을 수행 할 때 검색 결과에 액세스 할 때까지 실행되지 않습니다.

그래서

당신이 할 것입니다 ... 그리고

def find 
    @documents = Document.search_full_text(params[:ch_acte][:text]) 
end 

find.html.erb 당신은 ...

<% @documents.each do |document| %> 
    <%= document.name %> 
<% end %> 

쿼리가 @documents.each 라인이 검색을 실행할 때 실행 하다 할 수있다 문서 ... 즉 실행될 필요가있을 때만.

+0

나는 그것이 멍청한 질문이라는 것을 알았습니다. 많은 감사합니다. – thiebo

+0

매우 흥미 롭습니다.이 동작이 어디에서 문서화되어 있는지 알고 있습니까? –

+0

@Joel_Blum'ActiveRecord_Relation' 객체가 작동하는 방식입니다 (범위를 사용할 때 또는 'ActiveModel'에서 어디에 사용하는지) - 문서를 찾을 수는 없지만 근본적인 기능입니다. 코드가 콘솔이나 IRB에서 즉시 실행되는 이유는 콘솔이 자동으로 모든 행에 대한 검사를 호출하기 때문입니다. 콘솔에서이 동작을 우회하려면'Document.search_full_text ("esp"); false '이므로 검사는 ActiveRecord_Relation 대신에 false로 동작합니다. – SteveTurczyn