Melhor convenção para dados de DB de plugin personalizado para 2021?

Estou construindo um site que é uma comunidade de aluguel de imóveis, com a funcionalidade central voltada para discussões específicas de cada cidade. Haverá dados de usuários que especificam as cidades sobre as quais eles têm conhecimento e qual é o relacionamento deles com essas cidades (atualmente moram lá, moravam lá, etc.), e os usuários também poderão se inscrever em cidades em que desejam investir, mas sobre as quais não têm conhecimento. Todas as cidades serão categorias, com um campo personalizado para marcar seus dados geocodificados, permitindo que os usuários naveguem pelas cidades em um mapa.

O ponto em que estou indeciso é como estruturar isso do ponto de vista da eficiência do banco de dados. Quando você estiver em uma página de cidade, vou exibir um feed que mostra os “especialistas membros” daquela cidade. Se eu tiver que consultar todos os usuários e mapear seus campos personalizados e o hash do campo personalizado “cidades de especialista” toda vez que renderizar uma página de categoria, sinto que isso seria bastante lento, especialmente conforme o número de usuários e cidades cresce.

Se eu fosse construir isso no meu próprio aplicativo Rails, isso seria facilmente resolvido com algumas tabelas de junção e relacionamentos model hasmanythrough ou algo assim. O que estou querendo saber aqui é qual é a abordagem recomendada para um plugin que precisa de uma tabela de junção. Parece que migrações e tabelas personalizadas são desencorajadas e que geralmente é melhor usar campos personalizados ou o PluginStore – não consegui encontrar documentação real sobre o PluginStore, mas estou no processo de investigar.

Achei que seria prudente perguntar sobre a abordagem “oficialmente recomendada pelo Discourse” antes de me aprofundar demais em qualquer direção.

Obrigado :slight_smile:
Zach

3 curtidas

Isso pode ter sido o caso nos primeiros dias, mas hoje em dia é exatamente o oposto. Nós mesmos migramos nossos próprios plugins de campos personalizados para suas próprias tabelas onde fazia sentido, como o plugin de enquetes e o plugin de votação.

Plugins com modelos de dados ricos devem criar seus próprios modelos, tabelas, relacionamentos e migrações. É muito mais mantível e proporcionará excelente desempenho. Apenas fique atento aos problemas de N+1 :wink:

5 curtidas

Ah, ok, fantástico. Feliz por ter perguntado então. :wink: Existe uma maneira recomendada de modificar modelos principais a partir do meu plugin?

Gostaria de adicionar algumas definições e relacionamentos personalizados, por exemplo, um has_many_through com minhas novas tabelas, e não tenho muita certeza de como fazer isso da melhor forma, além de chamar funções no meu novo modelo onde preciso passar os IDs da categoria, do usuário, etc.

Encontrei esta postagem, mas parece que ele nunca recebeu uma resposta.

2 curtidas

Existem alguns exemplos no plugin Poll que mencionei acima:

2 curtidas

Incrível. Estou muito animado por isso ser possível! Obrigado.

3 curtidas