ACTUALIZACIÓN: Creo que ya lo tengo (casi) funcionando (!). Ahora, esto mostrará los temas más recientes que coincidan con el valor del campo personalizado. (El método #latest fue el más cercano que pude encontrar que tuviera sentido en el archivo config/routes.rb).
Es importante que, de hecho, se carguen en la página todos los temas que tengan el valor relevante del campo personalizado fun_level. ¿Hay algo más que deba hacer para lograrlo?
Aquí está el código para mis propias notas y por si resulta útil a otros:
–He creado el campo personalizado :fun_level. Luego:
plugin.rb
TopicQuery.add_custom_filter(:fun_level) do |topics, query|
if query.options[:fun_level]
topics.where("topics.id in (
SELECT topic_id FROM topic_custom_fields
WHERE (name = 'fun_level')
AND value = '#{query.options[:fun_level]}'
)")
else
topics
end
end
/connectors/my-plugin-outlet/fun-level.js.es6 (un archivo de JavaScript que se activa al acceder a la página relevante. Por lo tanto, este JavaScript podría estar en un inicializador o en un conector que se vincule a un plugin outlet. Me gusta usar código que vaya junto con un conector, así que usaré un componente de configuración aquí):
const ajax = require('discourse/lib/ajax')
export default {
setupComponent(args, component) {
let parsedResultArray = []
var endPoint = '/latest?fun_level=' + funLevel //funLevel = variable con el valor de los parámetros
ajax(endPoint).then(function (result) {
console.log('resultado de la lista de temas para temas que coinciden con ese nivel de diversión = ')
console.log(result.topic_list.topics)
//analizar resultados y cargarlos en parsedResultArray
component.set('showTopics', parsedResultArray
})
}
}
Ahora, los temas se cargarán en {{topic-list topics=showTopics}} que tengo en el componente correspondiente, el cual se inserta en la plantilla a través de my-plugin-outlet.
Este es un gran avance. Muchas gracias, @angus.