私は単純なオートコンプリート検索を作成しました。検索結果ページでこれを有効にしたのと同じ方法で結果をクリックできます<%= 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 %>
これは 'format::json'を追加しなくても機能しました(エラーが発生しました)。また、URLを表示するためにpg_search_documents.jsで行った変更を反映するように私のコードを更新します。ダニエルありがとう! – dstep