Я пытаюсь создать форму автозаполнения с помощью axios, и я не могу найти способ обмена данными между рельсами и моей формой
вот моя форма:
<div class="row">
<div class="col s12">
<div class="row">
<div class="input-field col s12">
<i class="material-icons prefix">textsms</i>
<input type="text" id="autocomplete-input" class="autocomplete" onkeyup="valueChange(this);">
<label for="autocomplete-input">Autocomplete</label>
</div>
</div>
</div>
</div>
Здесьмой javascript:
<script>
document.addEventListener('DOMContentLoaded', function() {
var elems = document.querySelectorAll('.autocomplete');
var instances = M.Autocomplete.init(elems, null);
});
function valueChange(elem) {
var instance = M.Autocomplete.getInstance(elem);
console.log("search for " + elem.value);
axios.post("<%= test_autocomplete_search_path %>", {
search: elem.value,
authenticity_token: '<%= form_authenticity_token %>',
})
.then(function (response) {
instance.updateData(response.data.nom_commune);
console.log(response.data.nom_commune);
})
.catch(function (error) {
alert(error);
});
};
</script>
Вот мой рубин:
def autocomplete_search
towns = Town.select(:nom_commune).where("nom_commune ILIKE ?", "%#{params[:search]}%")
render :json => towns.map { |town| {
name: town.nom_commune,
placeholder: nil
}
}
проблема в автозаполнении, кроме элементов, сформированных таким образом:
data: {
"Apple": null,
"Microsoft": null,
"Google": 'https://placehold.it/250x250'
},
, и у меня естьон отформатирован в формате «json». Я не хочу зацикливаться и тратить впустую время процессора, чтобы изменить его, является ли это причудливым способом 1 / правильно передать для сервера ИЛИ 2 / правильно получить его на стороне клиента?
спасибо
greg