Adiciona gem ancestry para otimizar hierarquia de posts do fórum#57
Open
franciscojuliao-star wants to merge 15 commits intodevelopmentfrom
Open
Adiciona gem ancestry para otimizar hierarquia de posts do fórum#57franciscojuliao-star wants to merge 15 commits intodevelopmentfrom
franciscojuliao-star wants to merge 15 commits intodevelopmentfrom
Conversation
- Adiciona ancestry ao Gemfile para gerenciar hierarquia de posts - Atualiza Gemfile.lock com as dependências - Atualiza versão do Ruby de 2.7.2 para 2.7.8
Member
|
Sobre o passo-a-passo
não precisa rodar esse generate, porque a migration já foi adicionada ao projeto. precisa rodar só o rake db:migrate depois bundle install pra atualizar as gems
Esse comando deu erro pra mim, rodei no singular Post.build_ancestry_from_parent_ids! |
Adiciona suporte dinâmico de paginação ao método posts_for_tree_view, permitindo navegação entre páginas no modo de visualização em árvore. Alterações: - Adiciona parâmetro 'page' ao método posts_for_tree_view - Atualiza controller para passar params[:page] ao método - Remove duplicação de .roots e .includes no model - Remove comentários desnecessários do código
fc8c7f7 to
87d0a23
Compare
biancastephani
requested changes
Dec 8, 2025
Member
biancastephani
left a comment
There was a problem hiding this comment.
- O método de Post.build_ancestry_from_parent_ids! atualizou o updated_at pra data foi rodado o comando de todos que receberam algo na coluna nova, sobrescrevendo a data que o post foi enviado/atualizado de fato. Tá passando pelo callback da timestamp
- A ordenação não tá funcionando adequadamente, quando há um post filho/neto na árvore mais recente, ele deve levar a árvore inteira pro início da lista. Não deve ordenar apenas pela data do post raiz (exemplo print em anexo. o post "oi" de 08/12 deveria ter subido a árvore inteira pro topo)
- Algo está fazendo demorar mais o carregamento do partial _post.html.haml do que o método original
Configuração necessária para popular a coluna ancestry sem alterar os campos updated_at dos posts existentes. Isso preserva os timestamps originais que são importantes para ordenação por última atividade.
Mudanças no model Post: - Adiciona callbacks para manter last_activity_at atualizado - Implementa método update_last_activity que propaga timestamp para o post e todos os ancestrais - Atualiza scope order_by_ancestry para ordenar por última atividade - Modifica can_change? para permitir atualização do updated_at O método update_last_activity usa path_ids do ancestry para atualizar toda a cadeia de ancestrais em apenas 2 queries SQL.
Mudanças no PostsController: - Adiciona eager loading dos filhos dos posts da página atual - Evita N+1 queries ao renderizar post.children na view - Usa includes(:files, :user, :profile) para carregar associações
Mudança na partial _post.html.haml: - Ordena post.children por last_activity_at DESC - Garante que comentários recentes apareçam primeiro - Usa id DESC como critério de desempate Comentários com atividade recente agora aparecem no topo dentro de cada post, melhorando a experiência do usuário.
O que essa migration faz: 1. Adiciona coluna last_activity_at 2. Popula automaticamente para posts existentes usando query SQL otimizada 3. Para cada post, busca o updated_at mais recente de toda a sua subárvore 4. Adiciona índice para otimizar ordenação
4004b7e to
f495043
Compare
Remove a coluna parent_id e seu índice da tabela discussion_posts, pois o relacionamento hierárquico agora é gerenciado pela gem ancestry através da coluna ancestry.
Comenta a associação belongs_to :parent e substitui todas as referências de parent_id por ancestry nas validações, callbacks e métodos privados, adequando o model para uso da gem ancestry.
Substitui parent_id por ancestry nas queries, respostas JSON e parâmetros permitidos, mantendo compatibilidade com a gem ancestry para hierarquia de posts.
Substitui parent_id por ancestry no formulário e em todas as variáveis JavaScript, garantindo que o frontend funcione corretamente com a gem ancestry.
Envolve a geração de links do menu em um bloco begin/rescue para capturar ActionController::UrlGenerationError e ignorar menus cujas rotas não existem na aplicação, evitando que o menu quebre quando há menus cadastrados no banco mas sem rotas correspondentes implementadas.
f21d10a to
4e16681
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implementa a gem ancestry para resolver problemas de lentidão no fórum causados por queries recursivas ineficientes.
Mudanças principais
Testes
Observações
1º Adicionar a coluna ancestry: