tutorial sitepoint react rails active ruby-on-rails ruby heroku activeadmin

ruby on rails - sitepoint - Ámbitos de administración activa para cada instancia de un modelo relacionado



react rails tutorial (4)

Aquí hay una solución real a este problema ... Aunque el uso de filtros en su lugar es más deseable en cuanto a estabilidad y mantenimiento, se ve mejor en ActiveAdmin y es más fácil de usar ya que los alcances se convierten en pestañas atractivas.

Es un truco, pero es una solución viable cuando corresponde:

El truco es actualizar los ámbitos en un before_filter en la acción de índice de los controladores .

Esto podría ser malo si tiene muchos ámbitos creados en un recurso (aunque puede establecer algunos límites fácilmente)

ActiveAdmin.register Project do menu :priority => 1 index do column :name column :company_name column :status column :projection do |project| number_to_currency project.projection end column :updated_at default_actions end scope :all scope :working, :default => true do |projects| projects.where(:status => ''working'') end controller do before_filter :update_scopes, :only => :index def update_scopes resource = active_admin_config Manager.all.each do |m| next if resource.scopes.any? { |scope| scope.name == m.first_name } resource.scopes << (ActiveAdmin::Scope.new m.first_name do |projects| projects.where(:manager_id => m.id) end) end # try something like this for deletions (untested) resource.scopes.delete_if do |scope| !(Manager.all.any? { |m| scope.name == m.first_name } || [''all'', ''working''].include?(scope.name)) # don''t delete other scopes you have defined end end end end

Tengo un problema con un alcance dinámico de administración activa. Estoy intentando crear un alcance para cada "administrador" de un "proyecto" en mi aplicación. Sin embargo, los ámbitos no parecen actualizarse cuando se crea un nuevo administrador (o se lo asigna a un proyecto) pero SI se actualizan si reinicio el servidor. Entonces, el código "funciona" per se, pero obviamente no de la manera que me gustaría. Soy un novato de ruby ​​/ rails, así que no estoy seguro si necesito hacer algo para "actualizar" el alcance de alguna manera.

Como un FYI, estoy usando Rails 3.2 en Heroku Cedar con ActiveAdmin

Aquí está el código en cuestión (que funciona pero solo trae nuevos administradores después de reiniciar el servidor):

Manager.find_each do |m| scope m.first_name do |projects| projects.where(:manager_id => m.id) end end

Y todo el modelo de Active Admin Project:

ActiveAdmin.register Project do menu :priority => 1 index do column :name column :company_name column :status column :projection do |project| number_to_currency project.projection end column :updated_at default_actions end scope :all scope :working, :default => true do |projects| projects.where(:status => ''working'') end Manager.find_each do |m| scope m.first_name do |projects| projects.where(:manager_id => m.id) end end end


Los verdaderos ámbitos dinámicos dentro de los bloques de registro de AA no funcionarán. Con eso quiero decir que los cambios en la tabla Manager no se reflejarán en los ámbitos dinámicos creados en ''inicialización''. También vea: https://github.com/gregbell/active_admin/wiki/Creating-dynamic-scopes . Lo que podría intentar es usar filtros en lugar de ámbitos. Entonces puedes escribir algo como:

filter :managers, :as => :select, :collection => proc { Manager.order(''name ASC'').map(&:first_name) }

y los cambios en las propiedades de los administradores se mostrarán (después de la actualización de la página) sin reiniciar el servidor. También puedes ver https://github.com/gregbell/active_admin/issues/1261#issuecomment-5296549

También tenga en cuenta que los ámbitos de registro activos son diferentes! desde ámbitos de administración activos. es posible que desee comprobar

http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/scope


Me pareció que esto funcionaba para mí:

Archivo ActiveAdmin

scope :working, :default => true do |projects| Project.working end

Modelo

scope :working, -> { where(:status => ''working'') }

Un poco tarde en la respuesta, pero es de esperar que ayude a alguien a salir.


Rails solo carga clases una vez en el modo de producción. Esto significa que sus ámbitos solo se invocan una vez y luego se almacenan en caché. Esta es la razón por la que los nuevos ámbitos no aparecen hasta después de un reinicio. Lo mismo sería cierto si editó el nombre del administrador en su caso.

Creo que la solución podría ser utilizar una lambda o Proc, pero en los pocos minutos que jugué con ella, no tuve éxito. Es posible que no sea posible la forma en que activeadmin también está escrito.