index form custom callbacks all active ruby-on-rails ruby helpers activeadmin

ruby-on-rails - form - custom controller activeadmin



Rails 3. ¿Cómo agregar un helper que ActiveAdmin usará? (10)

La definición de ActiveAdmin::ViewHelpers en app/admin/active_admin/view_helpers.rb me funciona con activeadmin 0.3.4 y 0.5.0 .

Estoy creando un ayudante para ser utilizado por Formtastic, pero obtengo la undefined local variable or method error de undefined local variable or method . No sé dónde ponerlo para que pueda funcionar.

Ya lo intenté en application_helper.rb y en app / helpers / active_admin / view_helpers.rb


Lo que funcionó para mí con Rails 3.2.11 y gem activaadmin (0.5.1) no agregaba el archivo app / active_admin / view_helpers.rb, o declaraba ningún módulo en config / initializers / active_admin.rb

Puse mis ayudantes lógicamente, por modelo, en los archivos app / * _ helpers.rb. Luego, dentro del archivo app / admin / model.rb que utilicé:

# app/admin/[resource].rb ActiveAdmin.register [Resource] do ... filter :gender, as: :select, collection: proc{genders} ... end

Para usar el ayudante en filtros, para mostrar una lista desplegable de géneros para filtrar, en la vista de lista. Para los campos de formulario de creación correspondientes, utilicé:

# app/admin/[resource].rb ActiveAdmin.register [Resource] do form do |f| f.inputs "Case Manager" do ... f.input :gender, as: :radio, collection: genders ... f.buttons end end end

Para mostrar botones de radio para el formulario de entrada.

No estoy seguro de por qué se requiere el proc{} fuera del form do |f| bloque, pero si alguien puede explicar por qué es una mala idea, voy a encontrar una manera diferente.


Lo que he descubierto al utilizar ActiveAdmin 0.6.1 es que ActiveAdmin buscará ayuda en la aplicación / helpers / active_admin / * _ helper.rb, pero el nombre en realidad no importa .

Lo que importa es:

  1. el nombre del archivo debe terminar en "_helper.rb"
  2. el nombre del módulo debe ser el camel-case del nombre del archivo
  3. el archivo debe estar en la aplicación / helpers / active_admin / directory.

Si alguien sabe dónde está oficialmente documentado esto, sería increíble.

Aquí hay un ejemplo: https://gist.github.com/afred/7035a657e8ec5ec08d3b


Necesita poner sus funciones auxiliares en el archivo app/helpers/active_admin/views_helper.rb Ejemplo:

module ActiveAdmin::ViewsHelper #camelized file name def my_helper # do something end end


Otra forma de hacerlo es hacer que el controlador ActiveAdmin específico generado detrás de las escenas incluya al ayudante. Este método permitirá que la inclusión de los ayudantes sea explícita por archivo en lugar de global.

ActiveAdmin.register MyModel do controller do include MyHelper end end


Puede definirlos en la aplicación / ayudantes / como lo intentó, pero debe incluirlos a través del inicializador del administrador activo de esta manera:

# in config/initializers/active_admin.rb ActiveAdmin.setup do |config| .... end module ActiveAdmin::ViewHelpers include ApplicationHelper end


Puedo hacer que funcione en ActiveAdmin 0.6.1 (¡finalmente!). La solución es crear un módulo auxiliar de la siguiente manera:

# app/helpers/active_admin_helpers.rb module ActiveAdminHelpers # make this method public (compulsory) def self.included(dsl) # nothing ... end # define helper methods here ... def helper_method ... end end

luego incluya este módulo de esta manera:

# app/admin/[resource].rb include ActiveAdminHelpers ActiveAdmin.register [Resource] do ... end

En realidad, no es una buena solución, pero está SECA y funciona bien. Ya he leído y probado muchos métodos y soluciones como el módulo ViewHelpers (puesto en ''app / helpers'' o ''app / admin / active_admin''), ActiveAdmin :: DSL monkey patching, ... pero esos nunca funcionaron en la versión 0.6.1 (no tengo ninguna idea sobre otras versiones) :(


También puedes usar los parciales de ActiveAdmin:

render partial: ''admin/my_partial'', locals: { var: my_var }

Y dentro de app/views/admin/_my_partial.html.arb _my_partial.html.arb tu active_admin ruby ​​code.


Usando activeadmin 1.0.0.pre1 desde git: //github.com/activeadmin/activeadmin.git

Rieles 4.2.1

Esto funcionó para mí ...

my_app/app/helpers/active_admin/resources_helper.rb

module ActiveAdmin module ResourcesHelper def resource_form_for(_resource, _params, _options = {}, &_block) url = if _resource.new_record? UrlBuilder.resources_path(_resource.class, _params) else UrlBuilder.resource_path(_resource.class, _params) end method = _resource.new_record? ? :post : :put options = { url: url, method: method, builder: ActiveAdmin::FormBuilder } options.merge!(_options) semantic_form_for([:admin, _resource], options) do |f| _block.call(f) end end end end

my_app/app/admin/balance_sheets.rb

ActiveAdmin.register BalanceSheet do form partial: ''form'' end

my_app/app/views/admin/balance_sheets/_form.html.erb

<%= resource_form_for(resource, params) do |f| %> <%= f.inputs "Fields" do %> <%= f.input :progress_status %> <%= f.input :crew %> <%= f.input :shift %> <%= f.input :expected_progress %> <%= f.input :real_progress %> <%= f.input :analyst, collection: User.analysts %> <%= f.input :activity_ids, as: :check_boxes, collection: Activity.balance_sheet_activities %> <%= f.input :worker_ids, as: :check_boxes, collection: Worker.all %> <% end %> <%= f.actions %> <% end %>


app/helpers/active_admin/view_helpers.rb

no me ayudó

EDITADO: lo cambié a views_helper.rb y ViewsHelper en consecuencia y funcionó

* pero si quieres definirlo solo para cierto recurso, puedes hacerlo a mi manera

tuve que definir

#app/helpers/active_admin/categories_helper.rb module ActiveAdmin::CategoriesHelper def helper_method end end

para mi aplicación de recurso active_admin / admin / categories.rb