Parece que lo que buscas es crear una API en Ruby a la que pueda llamar el JS. Un ejemplo es el plugin Data Explorer, que implementa una API de entrada de usuario con un ámbito de permiso de administrador en el lado de Ruby.
El JS del explorador de datos es bastante completo, así que solo daré un ejemplo simplificado de lo que probablemente necesitarías.
import { ajax } from "discourse/lib/ajax";
...
@action
sendTextboxData() {
ajax("/endpoint", {
type: "POST",
data: {
key: "value"
},
}).then((result) => {
// haz algo con el resultado
};
}
Puedes hacer lo mismo con un fetch() nativo de JS, pero parece que la función ajax() que proporciona Discourse maneja algunas cosas menores internamente.
Si tu código Ruby es lo suficientemente ligero, probablemente puedas incluirlo completamente en un solo archivo para el controlador. De lo contrario, puedes organizarlo como necesites.