Mejor convención para datos de DB de plugins personalizados para 2021?

Estoy construyendo un sitio que es una comunidad inmobiliaria de alquiler, cuya funcionalidad central se centra en discusiones específicas por ciudad. Habrá datos de usuarios que especifiquen las ciudades sobre las que tienen conocimientos y cuál es su relación con esas ciudades (actualmente viven allí, vivieron allí, etc.), y los usuarios también se suscribirán a ciudades en las que quieren invertir pero sobre las que no tienen conocimientos. Todas las ciudades serán categorías, con un campo personalizado para marcar sus datos geocodificados para que los usuarios puedan navegar por las ciudades en un mapa.

Donde tengo dudas es en cómo debería estructurar esto desde el punto de vista de la eficiencia de la base de datos. Cuando estás en una página de ciudad, mostraré un feed que muestre a los “expertos miembros” de esa ciudad. Si tengo que consultar a todos los usuarios y recorrer sus campos personalizados y el hash del campo personalizado “ciudades expertas” cada vez que se renderiza una página de categoría, siento que sería bastante lento, especialmente a medida que crece la cantidad de usuarios y ciudades.

Si estuviera construyendo esto en mi propia aplicación Rails, esto se resolvería fácilmente con algunas tablas de unión y relaciones has_many_through de modelos o algo similar. Lo que me pregunto aquí es cuál es el enfoque recomendado para un plugin que necesita una tabla de unión. Parece que las migraciones y tablas personalizadas están desaconsejadas y que generalmente es mejor usar campos personalizados o PluginStore; no he podido encontrar documentación real sobre el tema de PluginStore, pero actualmente estoy en proceso de investigar.

Pensé que sería prudente preguntar sobre el enfoque “oficial recomendado por Discourse” antes de profundizar demasiado en ninguna dirección.

Gracias :slight_smile:
Zach

3 Me gusta

Eso pudo haber sido cierto en los primeros días, pero hoy en día es todo lo contrario. Incluso hemos migrado nuestros propios plugins de campos personalizados a sus propias tablas cuando tenía sentido, como el plugin de encuestas y el plugin de votación.

Los plugins con modelos de datos ricos deben crear sus propios modelos, tablas, relaciones y migraciones. Es mucho más mantenible y ofrecerá un gran rendimiento. Solo ten cuidado con esos N+1 :wink:

5 Me gusta

¡Ah, vale, fantástico! Me alegro de haber preguntado entonces. :wink: ¿Hay alguna forma recomendada de modificar los modelos principales desde dentro de mi plugin?

Me gustaría añadir algunas definiciones y relaciones personalizadas, por ejemplo, un hasManyThrough con mis nuevas tablas, y no estoy muy seguro de cuál es la mejor manera de hacerlo, más allá de llamar a funciones en mi nuevo modelo donde tengo que pasar los IDs de la categoría, el usuario, etc.

Encontré este post, pero parece que nunca recibió respuesta.

2 Me gusta

Hay algunos ejemplos en el complemento Poll que mencioné anteriormente:

2 Me gusta

Genial. ¡Estoy muy emocionado de que esto sea posible! Gracias.

3 Me gusta