Penso che questa domanda entri nel dettaglio tecnico di Rails, ma eccomi:
Sto cercando di capire come visualizzare il proprietario o i proprietari di ogni gruppo nella pagina dell’indice dei gruppi (equivalente a questa pagina).
Il mio punto di partenza è il modello di gruppo, che mi fa capire che la caratteristica dei proprietari del gruppo non è collegata direttamente a un gruppo (a differenza, ad esempio, di “full_name”, che vedo essere parte dello schema del gruppo in fondo a quel link).
Quindi è chiaro che non posso chiamare group.owners come posso chiamare group.full_name. Allo stesso modo, non credo di poter ottenere le informazioni dall’API recuperando i dati di un gruppo, poiché “owners” non sembra essere uno dei valori restituiti.
Come potrei recuperare i proprietari di un gruppo per visualizzare tali informazioni?
Non sono del tutto chiaro su cosa tu stia cercando di ottenere, ma credo che tu stia cercando GroupUser. Puoi ottenere un elenco di group_id e gli user_id dei rispettivi proprietari utilizzando qualcosa come:
Grazie, questo è sicuramente un passo avanti. Il mio obiettivo è visualizzare i proprietari di un gruppo sotto il nome del gruppo nella pagina dell’indice dei gruppi.
Ho messo insieme qualcosa come una prova di concetto molto grezza che potrebbe darti un punto di partenza per capire come procedere da solo:
my-plugin/plugin.rb
# frozen_string_literal: true
# name: Group Test
# about: Group Test
# version: 0.1
# authors: Tester
# url: https://github.com/someone/something
enabled_site_setting :group_test_enabled
after_initialize do
add_to_serializer(:basic_group, :owners) do
GroupUser.where(group_id: object.id, owner: true).pluck("user_id")
end
end
Se metti tutto insieme e abiliti il plugin nelle impostazioni del sito, dovresti vedere gli ID utente dei proprietari del gruppo elencati nella pagina dei gruppi.
Non potrò aiutarti oltre, quindi in bocca al lupo!
Questo è estremamente utile, grazie. Ho capito che non sei in grado di fornire ulteriore aiuto con il codice, ma spero di poter fare due domande generali che potrebbero essere utili anche ad altri:
–Puoi spiegare brevemente perché è necessario un serializzatore in questo caso? (sto cercando di capire non solo per questo, ma anche per altre personalizzazioni)
E solo una domanda veloce: potrei ottenere questo risultato direttamente nella mia dashboard? (creare un plugin sarebbe sicuramente più organizzato, ma dato che sono su un piano ospitato, non posso importare direttamente nuovi plugin; richiede almeno qualche passaggio in più)
Certo I dati non sono esposti di default nel BasicGroupSerializer. Includiamo solo ciò che ci serve.
È un po’ un labirinto da seguire, ma l’unico motivo per cui il componente groups-info ha a disposizione ciò che ha è perché riceve group dal suo template genitore:
E il template genitore lo ottiene dal controller:
Mi dispiace, ma non credo sia possibile. A meno che non ci sia qualche magia di cui non sono a conoscenza!
Ciao @tshenry, sto cercando di configurare un plugin che includa un codice simile a quello che hai fornito sopra per esporre il proprietario del gruppo. Ho una domanda su cui sto ragionando:
–il modello rilevante qui è “group” (che è referenziato da groups-info)
–ma nel serializer, non scrivi: add_to_serializer(:group, :owners)… Invece di referenziare :group, fai riferimento a :basic_group, come:
add_to_serializer(:basic_group, :owners)
Perché fai riferimento a basic_group invece di group in add_to_serializer?
Come hai identificato che quello serializer fosse quello giusto per questo caso?
Ecco quello che ho capito: nel controller dei gruppi, nell’azione index, c’è una funzione (o metodo) render_json_dump che include il BasicGroupSerializer nella chiamata serialize_data.
La pagina rilevante per visualizzare i dati dei gruppi è l’indice dei gruppi, quindi l’azione index nel controller è quella giusta da esaminare qui.
È così che sai che il BasicGroupSerializer è quello corretto da utilizzare in questo contesto?
Se tutto ciò è corretto, allora il GroupShowSerializer verrebbe utilizzato per la visualizzazione della pagina di dettaglio del gruppo, poiché è lo serializer riferito nell’azione show del controller? (la pagina con i dettagli di un gruppo, anche se non sembra esserci una vista “groups.show”).
E cosa succede se non c’è alcun serializer riferito, come nell’azione new del controller?
Un’ulteriore cosa da notare, che è davvero confusa e che mi ha confuso molto all’inizio: Rails è un framework e utilizza convenzioni di denominazione molto rigide per far funzionare alcune delle sue magie. Non è immediatamente chiaro, quando non ci si è abituati, come tutto venga collegato, ma tenendo conto delle convenzioni di denominazione inizia a diventare più chiaro.
Grazie per quel riferimento, molto utile. Trovo un po’ confuso il file delle rotte. Ad esempio, per quanto riesco a vedere, non c’è alcun riferimento all’azione del controller groups#index, anche se è chiaramente l’azione rilevante per la pagina principale del gruppo. Tuttavia, vedo l’azione groups#index quando eseguo:
% rails routes, che immagino sia anche un modo utile per vedere come una determinata pagina corrisponde a un controller.