Auto complete your addresses fields with Brazilian CEP (zip code).
Include to your Gemfile
gem 'active_admin-cep_auto_complete'
1. Create a custom page in app/admin/cep.rb
ActiveAdmin.register_page 'CEP' do
setup_cep_auto_complete
end
2. Add a CEP Input
f.input :cep, as: :cep
f.input :street
f.input :state
f.input :city
f.input :neighborhood
p.s. if you have a different input name, you'll have to change your URL option.
3. It works!!
Input options
Option | Type | Default | Description |
---|---|---|---|
url |
string | Singular name of the input. e.g. /cep |
The route URL that CEP will be fetched from. |
fields |
array | [:street, :state, :city, :neighborhood] |
The inputs names which will be auto completed. |
If you want to add any custom field to be autocompleted, just do the follow:
1. Add to the CEP input options
f.input :cep, as: :cep, fields: [:state_id]
f.input :state_id
2. Add the render method to the controller
ActiveAdmin.register_page 'CEP' do
setup_cep_auto_complete do
# New field
field :state_id do |cep|
state = State.where("title LIKE '%?%'", cep.state).take
if state.any?
state.id
end
end
# Another new field that uses a result from other one
field :some_other_field do |cep|
"State number #{cep.state_id}"
end
# Override an original field
field :street do |cep|
"Street #{cep.street}"
end
end
end
3. Now, the javascript will auto trigger the field with something like this:
$('#address_state_id').val(cep.state_id);
p.s. it just a pseudo-code
If you want support a different plugin (like select2) or any other javascript render method, you can do:
$('#address_state_id').on('active_admin:cep_auto_complete', function(e, value, cep, input) {
if (value) {
$(this).val(value);
$(this).trigger('change');
}
});