2017-10-04 11 views
0

私は単純なオートコンプリート検索を作成しました。検索結果ページでこれを有効にしたのと同じ方法で結果をクリックできます<%= link_to pg_search.searchable.title、pg_search.searchable%>。PG Multisearchを使用してjQueryオートコンプリートを埋め込むときのリンクをjbuilderに含める方法

検索結果が投稿されている場合は、インデックスページの各検索結果へのリンクを追加できましたが、jQueryから各項目を直接クリックすることを許可しますオートコンプリートの結果。

以下のjsマークアップでhrefとしてitem.idを試してみましたが、/ classname/idではなく/ idへのリンクしか得られませんでした。私はitem.pathを試してから、jbuilderのjson配列に "path"を追加して、[object object]を取得しています。どうすればそこにあるオブジェクト自体への実際のリンクを得ることができますか?

レール5.1.2、ルビー2.4.1

pg_search_documents.js

var app = window.app = {}; 

app.pg_search_documents = function() { 
    this._input = $('#term'); 
    this._initAutocomplete(); 
}; 

app.pg_search_documents.prototype = { 
    _initAutocomplete: function() { 
    this._input 
     .autocomplete({ 
     source: '/lists', 
     appendTo: '#search-results', 
     select: $.proxy(this._select, this) 
     }) 
     .autocomplete('instance')._renderItem = $.proxy(this._render, this); 
    }, 

    _render: function(ul, item) { 
    var markup = [ 
     '<span class="title"><a href="' + item.url + '">' + item.title + '</a></span>', 
    ]; 
    return $('<li>') 
     .append(markup.join('')) 
     .appendTo(ul); 
    }, 

    _select: function(e, ui) { 
    this._input.val(ui.item.title); 
    return false; 
    } 
    }; 

リストコントローラ

def index 


respond_to do |format| 
format.html 
format.json { @pg_search_documents = PgSearch.multisearch(params[:term]) } 
    end 

if params[:term] 

    @pg_search_documents = PgSearch.multisearch(params[:term]) 
else 
    @lists = List.all 
end 
end 

リスト

index.json.jbuilderの
json.array!(@pg_search_documents) do |pg_search| 
    json.id   pg_search.searchable.id 
    json.title  pg_search.searchable.title 
    json.path   pg_search.searchable 

end 

リストはあなたにもRailsのビューヘルパーを使用することができますのJBuilder JSONを望む

<script> 
     $(function() { 
      new app.pg_search_documents; 
     }); 
     </script> 
     <p id="notice"><%= notice %></p> 

     <h1>Lists</h1> 

     <%= form_tag lists_path, method: :get do %> 
     <%= label_tag 'List' %> <%= text_field_tag 'term', params[:term], autofocus: true %> 
     <%= submit_tag 'Search!' %> 
     <% end %> 
     <div class="results" id="search-results"></div> 

     <% if params[:term] %> 
      <% if @pg_search_documents.present? %> 

      <% @pg_search_documents.each do |pg_search| %> 
       <% if pg_search.searchable.respond_to?(:title) %> 
       <%= link_to pg_search.searchable.title, pg_search.searchable %> 
       <% else %> 
       <%= pg_search.searchable.url %> 
       <% end %> 
      <% end %> 
      <% else %> 

      There is no match! Create this list yourself <%= link_to 'New List', new_list_path %> 

      <% end %> 

     <% else %> 

     <%= render @lists %> 
     <% end %> 

     <br> 

     <%= link_to 'New List', new_list_path %> 

答えて

1

をindex.html.erb。

json.array!(@pg_search_documents) do |pg_search| 
    json.id   pg_search.searchable.id 
    json.title  pg_search.searchable.title 
    json.url   url_for(pg_search.searchable, format: :json) 
end 
+0

これは 'format::json'を追加しなくても機能しました(エラーが発生しました)。また、URLを表示するためにpg_search_documents.jsで行った変更を反映するように私のコードを更新します。ダニエルありがとう! – dstep

関連する問題