index form docs custom all active ruby-on-rails resources scope activeadmin

ruby-on-rails - docs - custom form activeadmin



Dos páginas para el mismo recurso-ActiveAdmin (2)

Actualmente tengo un modelo de User , que está registrado en user.rb como un nuevo recurso para ActiveAdmin. La página generada muestra todos los usuarios con ámbitos ( all / journalists / startup_employees ). Ahora quiero crear otra página para el mismo recurso y los mismos ámbitos, pero solo debería haber registros con el campo de waiting establecido en true (y la página anterior debería mostrar solo esto con :waiting => false ). ¿Cómo podría hacer eso? Sé que podría hacer eso con filtros, pero necesito dos páginas separadas, con dos enlaces en el menú.

// SOLUCIÓN

Fue incluso más fácil que los consejos (gracias chicos!):

ActiveAdmin.register User, :as => ''Waitlist User'' do menu :label => "Waitlist" controller do def scoped_collection User.where(:waitlist => true) end end # code scope :all scope :journalists scope :startup_employees end

ActiveAdmin.register User do controller do def scoped_collection User.where(:waitlist => false) end end # code scope :all scope :journalists scope :startup_employees end


STI ( herencia de una sola tabla ) se puede usar para crear múltiples "sub-recursos" de la misma tabla / modelo principal en Active admin

  1. Agregar una columna de "tipo" en la tabla de usuarios como una cadena

  2. Agregue esto al modelo de User para reflejar el campo de espera con el campo de tipo

    after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting" )}

  3. Crear los nuevos modelos UserWaiting y UserNotWaiting

    class UserWaiting < User end class UserNotWaiting < User end

  4. Crear recursos de Active Admin

    ActiveAdmin.register UserWaiting do # .... end ActiveAdmin.register UserNotWaiting do # .... end

  5. Puede ejecutar una sincronización por primera vez en la consola

    User.all.each {|user| user.save}

..............

Otra forma podría ser omitir la columna de tipo (pasos 1, 2 y 5) y resolver el resto con los ámbitos.

  1. Pasos 3 y 4 anteriores

  2. Luego crea los ámbitos

    #model/user.rb scope :waiting, where(:waiting => true) scope :not_waiting, where(:waiting => false)

  3. Alcances en Active Admin

    #admin/user.rb scope :waiting, :default => true #admin/user_not_waitings.rb scope :not_waiting, :default => true

Solo asegúrese de que los otros ámbitos en estas dos páginas también estén filtrados en espera / no_ en espera


podría usar un parámetro para distinguir los casos y representar diferentes acciones según el parámetro:

link_to users_path(:kind => ''waiting'')

y en el users_controller.rb

def index if params[:kind]==''waiting'' @users= Users.where(:waiting => true) render :action => ''waiting'' and return else # do your other stuff end end

luego ponga su nueva página (parcial) en app / views / users / waiting.html.erb

Si desea utilizar un diseño diferente para esta página, agregue el parámetro de diseño para renderizar:

render :action => ''waiting'', :layout => ''other_layout'' and return