Я работаю над своим первым плагином и хочу иметь возможность получать текстовое содержимое текстового поля в панели администратора (часть плагина) после нажатия кнопки. Затем я хочу выполнить некоторые действия с этим содержимым на Ruby. Есть ли способ для фронтенда Ember отправить данные обратно на бэкенд Ruby?
Мой plugin.rb:
# name: Discourse Sample Plugin
# about: A simple plugin to play around with
# version: 1.0.0
# authors: NateDhaliwal
# url: https://google.com
enabled_site_setting :plugin_enabled
add_admin_route 'sample_page.title', 'sample-page'
Discourse::Application.routes.append do
get '/admin/plugins/sample-page' => 'admin/plugins#index', constraints: StaffConstraint.new
end
Или, может быть, лучше использовать настройку? Однако мой сценарий использования таков, что текстовое поле не должно сохранять значения каждый раз. Предоставляет ли YAML эту функциональность? Можно ли изменить настройки сайта через Ruby?
Похоже, вы ищете способ создать API на Ruby, к которому сможет обращаться JavaScript. Примером может служить плагин Data Explorer, который реализует API для ввода данных пользователем с правами администратора на стороне Ruby.
JavaScript-код для Data Explorer довольно объёмный, поэтому я приведу упрощённый пример того, что вам, скорее всего, понадобится.
import { ajax } from "discourse/lib/ajax";
...
@action
sendTextboxData() {
ajax("/endpoint", {
type: "POST",
data: {
key: "value"
},
}).then((result) => {
// сделайте что-то с результатом
};
}
То же самое можно сделать с помощью нативного JS fetch(), но функция ajax(), предоставляемая Discourse, обрабатывает несколько незначительных деталей под капотом.
Если ваш код на Ruby достаточно прост, вы, вероятно, сможете разместить его полностью в одном файле контроллера. В противном случае вы можете организовать его так, как вам удобно.