2017-01-19 2 views
0

Это, вероятно, nooby. Я строю форму поиска.pg_search модель и отношение к диспетчеру

В модели document.rb, у меня есть это:

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

и в documents_controller.rb, у меня есть:

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

Но НИЧЕГО получает отправить в базу данных. Журнал сервера только говорит:

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) 

Кроме метода pg_search_scope в модели и вызова этого метода в контроллере, что я должен сделать, чтобы получить это отправляется в базу данных?

Когда я запустил Document.search_full_text("esp") в консоли rails, он отлично работает.

UPDATE

Я добавил это в documents/find.html.erb:

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

я получаю страницу, которая отображает мое меню, и только после этого белый ...

+1

исправить документы_models.rb в вашем вопросе к документу_controller –

ответ

3

Вы должны понимать, что Rails пытается быть максимально реалистичным. Когда вы создаете поиск, он НЕ выполняется до тех пор, пока вы не попытаетесь получить доступ к результатам поиска.

Так вы могли бы сделать ...

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 ", и поэтому проверка работает на' false' вместо ActiveRecord_Relation. – SteveTurczyn

Смежные вопросы