¿Recuperar temas basados en campo personalizado?

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.