У меня есть форма адреса, которую я хотел бы заполнить автоматически после ввода пользователем адреса (в моем случае, начиная с улицы, что, как я проверял, не является проблемой). Вот что я сделал до сих пор:
- Установленные гемы: algoliasearch-rails и algolia-place-rails
- Создан файл автозаполнения: app / assets / javascripts / autocomplete. js и написал код, как описано здесь
->
import places from 'places.js';
(function() {
var placesAutocomplete = places({
appId: 'xxx',
apiKey: 'xxx',
container: document.querySelector('#form-address'),
templates: {
value: function(suggestion) {
return suggestion.name;
}
}
}).configure({
type: 'address'
});
placesAutocomplete.on('change', function resultSelected(e) {
document.querySelector('#form-city').value = e.suggestion.city || '';
document.querySelector('#form-zip').value = e.suggestion.postcode || '';
});
})();
Я установил node_modules: местах. js с npm
3. Вернулся к моему файлу вида (который является частью многошаговой формы) и добавил необходимые идентификаторы в поля формы app / views / user_steps / address. html .erb
<div class="container">
<p class="notification">Please finalise your personal information.</p>
<div id="myModal" class="modal" >
<div class="modal-content">
<div class="modal-body">
<button type="button" class="btn btn-secondary dismiss-close" data-dismiss="modal">Close</button>
</div>
</div>
</div>
<div class="center-items-register-second">
<%= form_for(@user, url: wizard_path, remote: true) do |f| %>
<%= render "devise/shared/error_messages" %>
<div class="row second 1">
<div class="column">
<div class="field wizard">
<%= f.label :street, class: 'required' %><br />
<%= f.text_field :street, id: 'form-address', class: 'form-control' %>
</div>
</div>
<div class="column">
<div class="field housenumber">
<%= f.label :house_number, class: 'required' %><br />
<%= f.text_field :house_number, class: 'form-control' %>
</div>
</div>
</div>
<div class="row second 2">
<div class="column">
<div class="field wizard">
<%= f.label :city, class: 'required' %><br />
<%= f.text_field :city, id: 'form-city', class: 'form-control' %>
</div>
</div>
<div class="column">
<div class="field wizard zipcode">
<%= f.label :zip_code, class: 'required' %><br />
<%= f.text_field :zip_code, id: 'form-zip', class: 'form-control' %>
</div>
</div>
</div>
<div class="row btns second 3">
<div class="column btns">
<%= f.submit "Register", class: 'btn form margin second'%>
</div>
<% end %>
<div class="column btns">
<%= link_to "Quit", @user, method: :delete, data: { confirm: "Your data won't be saved! Are you sure you want to quit registration process?", title: " " }, class: 'btn form margin second' %>
</div>
</div>
</div>
</div>
</div>
Я также добавил в свою заявку. js файл:
//= require algolia-places-rails/places.min
И у меня есть файл конфигурации для AlgoliaSearch: algoliasearch.rb
AlgoliaSearch.configuration = { application_id: 'xxx', api_key: 'xxx' }
В моей форме, однако ничего не изменилось. Я буду sh это будет похоже на это .