Czasami, szczególnie gdy nasza aplikacja to tylko API dla jakiegoś frontendu potrzebujemy móc tymi danymi zarządzać. Np dodać nową kategorie. W takim celu nie ma sensu wymyślać koła na nowo, a już szczególnie gdy przygotowujemy tylko MVP. Możemy użyć gotowego panelu administracyjnego.
Jest kilka gotowych rozwiązań dla naszego problemu np https://activeadmin.info/ albo rails admin ale w tym nagraniu pokaże wam Administrate. By nie robić aplikacji od zera, posłużę się tu kodem z jednego z wcześniejszych odcinków.
na początek dodajmy nowy gem do naszego Gemfila
...
gem "administrate"
odpalmy bundle install
teraz musimy uruchomić generator rails generate administrate:install
doda on nam nową ścieżkę w routerze oraz nowy kontrolery w app/controllers/admin/
zależnie od tego co mieliśmy do tej pory
przyjrzyjmy się temu co możemy znaleźć
po pierwsze
w admin/applicaction_controller.rb
powinniśmy dodać jakieś zabezpieczenie, możemy użyć istniejących uzytkowników, możemy przygotować jakąś osobą autentykacje, np devise tylko dla adminów, może nowy model Admin zamiast user
a możemy po prostu zrobić basic auth
module Admin
class ApplicationController < Administrate::ApplicationController
http_basic_authenticate_with(
name: "user",
password: "password",
)
# Override this value to specify the number of elements to display at a time
# on index pages. Defaults to 20.
# def records_per_page
# params[:per_page] || 20
# end
end
end
jeżeli mamy jednego admina, lub zmiany nie muszą być powiązane z konkretnym userem, powinno wystarczyć
jeżeli zajrzycie na http://localhost:3000/admin/posts to możecie zobaczyć, że wyświetla nam się np autor posta, czy liczba komentarzy ale już nie tytuł. Moim zdaniem tytuł jest bardziej przydatną informacją. Na szczęście można łatwo to zmienić.
w app/dashboards/post_dashboard.rb
mamy collection atributes i to tam możemy ustalić co ma się wyświetlać. Możemy do arraya dodać tytuł
COLLECTION_ATTRIBUTES = %i[
comments
category
user
title
id
].freeze
po odświeżeniu strony, tytuł będzie widoczny
Jeżeli dodacie nowy model do aplikacji i chcecie w łatwy sposób dodać go do panelu administracyjnego to wystarczy odpalić
rails generate administrate:dashboard Nazwamodelu
w ten sposób utworzymy nowy dashboard
Z racji, że administrate generuje nam normalne kontrolery, możemy też wygenerować widoki. Więc w łatwy sposób możemy wykorzystać go do bardzo custowych akcji. Np import produktów z excela. Ja nie mam zbyt skomplikowanej aplikacji więc dodam jakąś prostą akcje. Skasowanie wszystkich komentarzy. Bo dlaczego nie?
rails generate administrate:views
wygenerujemy sobie wszystkie widoki
teraz przejdźmy do kontrolera z komentarzami, kontrolera administratora
zróbmy sobie nową metode
def destroy_all
Comment.destroy_all
end
edytujmy router by nasza akcja mogła działać
resources :comments do
get :destroy_all, on: :collection
end
pozostaje nam jeszcze widok
wystarczy, że gdzieś w naszym widoku umieścimy
<%= link_to "Usuń wszystko", controller: "comments", action: "destroy_all", class: "button" %>
możemy przejść na localhost:3000/admin/comments by zobaczyć efekt naszej pracy
Nie będę ukrywać, Administrate nie jest rozwiązaniem na każdy panel. Czasami potrzeba czegoś naprawdę customowego. Ale dla sporej ilości zastosowań, powinien wystarczyć
to tyle na dzisiaj
Miłego kodowania! Kod aplikacji