Parece que o que você está procurando é criar uma API em Ruby que o JS possa chamar. Um exemplo é o plugin Data Explorer, que implementa uma API de entrada do usuário com escopo de permissão de administrador no lado Ruby.
O JS para o Data Explorer é um pouco mais robusto, então darei apenas um exemplo simplificado do que você provavelmente precisaria.
import { ajax } from "discourse/lib/ajax";
...
@action
sendTextboxData() {
ajax("/endpoint", {
type: "POST",
data: {
key: "value"
},
}).then((result) => {
// fazer algo com o resultado
};
}
Você pode fazer a mesma coisa com um fetch() nativo do JS, mas parece que a função ajax() que o Discourse fornece lida com algumas pequenas coisas nos bastidores.
Se o seu código Ruby for leve o suficiente, você pode colocá-lo inteiramente em um único arquivo para o controller. Caso contrário, você pode organizá-lo como precisar.