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
Agregar una columna de "tipo" en la tabla de usuarios como una cadena
Agregue esto al modelo de
User
para reflejar el campo de espera con el campo de tipoafter_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting" )}
Crear los nuevos modelos
UserWaiting
yUserNotWaiting
class UserWaiting < User end class UserNotWaiting < User end
Crear recursos de
Active Admin
ActiveAdmin.register UserWaiting do # .... end ActiveAdmin.register UserNotWaiting do # .... end
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.
Pasos 3 y 4 anteriores
Luego crea los ámbitos
#model/user.rb scope :waiting, where(:waiting => true) scope :not_waiting, where(:waiting => false)
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