Skip to content
Clément Prod'homme edited this page May 4, 2018 · 6 revisions

Pasos para usarla

  • Referenciar a la gema en el Gemfile de la app host:
gem 'ajax_forms', github: 'bys-control/activeadmin-ajax_forms'
  • Agregar al active_admin.js.cofee de la app host:
#= require ajax_forms/application
  • En los resource que se quieran usar agregar:
ajax_forms :quick_new_partial => 'item',
           :find_conditions=>{
             :m=>"or",
             :per=>30,
             :find_fields=>[:name_contains, :partner_name_contains]
           }

donde "item" es el nombre del resource

  • Si se le pasa un id, busca por id y retorna ese registro.
  • Si no se le pasan condiciones, devuelve aquellos que coincidan con el campo name del resource en cuestión
  • En caso de querer hacer la búsqueda con otras condiciones pasar un hash:

:find_conditions=>{:m=>"or", :per=>30, :find_fields=>[:name_contains, :partner_name_contains]}

El hash con clave :find_conditions debe respetar las convenciones de búsqueda de https://github.com/activerecord-hackery/ransack

  • Crear el partial con el form de la sig. manera:
<%= semantic_form_for [:admin, @item], remote: (defined? @remote) ? true : false, url: @form_url, :builder => FormtasticBootstrap::FormBuilder do |f| %>

<div id="quick-add-errors"></div> <!-- Agregar para mostrar errores -->

# Poner la clase select2-autocomplete para que funcione el selector con select2
# Poner la clase ajax si se quiere hacer la búsqueda de los resultados en el selector mediante ajax
# En el atributo data se deben pasar las opciones:
#  - multiple (boolean): true (default) - indica si el selector es simple o multiple (aún no implementado)
#  - source: path a la función find donde se devuelve key y value a mostrar en el selector. @todo: modificar para que si no se pasa nada se tome la función por defecto de la gema. En caso contrario se puede sobreescribir por una propia
#  - modal: path del controller que renderiza el partial en el modal fancybox

<%= 
  f.input :item_id,
          :label => false,
          :as => :string,
          :input_html => {
            :class => "select2-autocomplete ajax input-sm",
            :data => {
              :multiple => false,
              :source => find_admin_items_path,
              :modal => quick_new_admin_items_path
            }
          }
%>

# custom find method:
# add dependent condition:
# - selectorId: value of this selector id is passed to parameters
# - ransackFilter: filter strinc compatible with ransack gem. It will be applied with selectorId value when filter over select2 box
<%= 
  f.input :project_id,
          :as => :string,
          :input_html => {
            :class => "select2-autocomplete ajax",
            :data => {
              :multiple => false,
              :source => find_projects_admin_invoices_path,
              :modal => quick_new_admin_projects_path,
              :dependent=>{
                :selectorId=>"invoice_partner_id",
                :ransackFilter=>:partner_id_eq
              }
            }
          },
          :wrapper_html => {
            :class => "col-md-4"
          }
%>

<%= end %>

Clone this wiki locally