Ich habe erfolgreich Jquery-Autocomplete in meine Rails App integriert, derzeit können Benutzer mehr als 5000+ Flughäfen suchen und bisher funktioniert die Integration genau wie gewünscht, aberSuche und Anzeige mehrerer Spalten bei der Verwendung von jQuery Autocomplete in Rails?
Jeder Flughafen hat mehrere Spalten, derzeit bin ich den Flughafennamen zurückkehren möchte aber stattdessen
**
airport_name zeigen - AIRPORT_CITY - airport_iata - airport_icao
**
Ich habe bisher Ryan Bates Railscast verwendet, um mich zu erhalten begonnen Episode #102
aber geändert und optimiert dank andere Ressourcen seit seinem Video. Entschuldigung, ich kann sie jetzt nicht referenzieren, werde aber meine Frage aktualisieren, sobald ich Links zu ihren Anweisungen gefunden habe.
In jedem Fall Autocomplete funktioniert wie geplant und ich habe es geschafft, ein verstecktes Feld zu füllen, aber ich würde wirklich gerne mehr als nur den Namen des Flughafens bei der Suche anzeigen. Ich werde weiterhin nur die Flughafen-ID speichern.
Jede Hilfe ist willkommen, hier ist mein Code.
_form.html.erb
<div class="field">
<%= f.label :departure_airport %><br>
<%= text_field_tag nil, nil, :id => 'claim_departure_airport_name', data: {autocomplete_source: Airport.order(:name).map { |t| { :label => t.name, :value => t.id } } }, class: "form-control" %>
</div>
<%= f.hidden_field :d_airport_id, id: 'd_airport_id' %>
<%= f.hidden_field :a_airport_id, id: 'a_airport_id' %>
claims.coffee
jQuery ->
$('#claim_departure_airport_name').autocomplete
source: $('#claim_departure_airport_name').data('autocomplete-source')
select: (event, ui) ->
# necessary to prevent autocomplete from filling in
# with the value instead of the label
event.preventDefault()
$(this).val ui.item.label
$('#d_airport_id').val ui.item.value
$('#claim_arrival_airport_name').autocomplete
source: $('#claim_arrival_airport_name').data('autocomplete-source')
select: (event, ui) ->
# necessary to prevent autocomplete from filling in
# with the value instead of the label
event.preventDefault()
$(this).val ui.item.label
$('#a_airport_id').val ui.item.value
Wie man sehen kann ich ohne die Notwendigkeit, die Modelldaten direkt am Erreichen für einen dedizierten Controller, obwohl ich realisiere, dass dies viel intelligenter wäre als meine derzeitige Lösung, da ich dies in anderen Bereichen der Plattform einführen möchte.
Ich verstehe nicht alles, was in der jQuery-Code in meiner Kaffeedatei passiert, die aus einer anderen Quelle erhalten wurde, obwohl ich vergess, wer Kredit geben. Soweit ich weiß, nimmt es die ID des Flughafens und bevölkert das versteckte Feld?
Wenn Sie erkennen können, wie andere Flughafen-Datenbankspalten dem Benutzer angezeigt werden, wäre das großartig.
Dank
bearbeiten
wünschen sich auch die automatische Vervollständigung daran zu hindern, die Datenquelle in html aufgrund ernsthaft lange Ladezeiten zu laden. Ein Screenshot von dem, was ich meine, ist unten.
Vielen Dank für Ihre Antwort. Ich habe deinen ersten Vorschlag benutzt und getestet, was gut zu funktionieren scheint. Ich fragte mich, ob es eine Möglichkeit gab, den gesamten Inhalt des Quellladevorgangs zu stoppen. Es gibt mehr als 5.000 Flughäfen zu suchen und laden Sie sie zweimal, so scheint die Ladezeit der Seite ist sehr langsam. Ich habe meine Frage aktualisiert, um einen Screenshot von dem zu enthalten, was ich meine. Danke – Dearg
Verweise - https://jqueryui.com/autocomplete/#remote. Sie müssen eine neue Route erstellen, die Daten im erforderlichen Format beantwortet. Sie können dort aktive Datensatzfilter schreiben. – Sebin