Здравствуйте,
Мне нужна помощь. Я привык разрабатывать полнофункциональные приложения, но в отношении Ember и Rails я всё ещё новичок.
Я хочу добавить ещё один способ оплаты (банковский перевод) в плагин discourse-subscriptions. Мне уже удалось создать несколько новых маршрутов и добавить некоторые функции, но я испытываю трудности с добавлением нового контроллера в директорию /discourse_subscriptions/ контроллеров и его корректной настройкой.
Я хочу настроить Ruby-контроллер, который будет работать как сервер, и шаблон Ember в качестве клиента. Структура следующая:
После создания намерения платежа (payment intent) контроллер payment_intent должен вернуть клиенту необходимые инструкции по оплате.
Подробнее: Stripe - принятие банковских переводов
Я уже создал новые страницы, добавив методы в файл subscribe_controller.rb в папке контроллеров discourse_subscriptions/, но при попытке создать ещё один контроллер (сервер) он не работает и выдаёт ошибку 404. Однако в инспекторе Ember я вижу, что маршрут действительно существует (да, это действительно сбивает с толку).
Примечание: я создал все соответствующие маршруты и их типы методов в файлах route.rb и subscriptions-route-map.js.
Я создал Ruby-контроллер payment_intent и соответствующий маршрут. Контроллер должен получать POST-запрос от клиента и создавать намерение платежа Stripe на основе данных, полученных с помощью POST-запроса. После создания намерения платежа он должен вернуть клиенту необходимые инструкции по оплате.
На стороне клиента у меня есть небольшая форма с кнопкой отправки.
Мне не удаётся установить связь между этим контроллером и страницей клиента (сервер-клиент); тот факт, что существуют два контроллера (Rails и Ember), немного сбивает с толку.
Отличный прогресс. Для вашего первого шага в разработке плагинов для Discourse это действительно амбициозно. Преимущество в том, что вы получите чувство достижения и пользы, когда всё заработает. Риск заключается в том, что вы берёте на себя слишком много сразу, и это может отбить у вас желание продолжать работу с платформой. Связка Ember и Rails — довольно сложная задача, особенно на начальном этапе, так что продолжайте в том же духе!
Некоторые советы на данный момент:
- Разбивайте задачи на части.
- Выгрузка форка в GitHub и предоставление прямых ссылок на фрагменты кода здесь может помочь сообществу лучше понять, что вы делаете.
- Сначала сосредоточьтесь на данных, поступающих из вашего контроллера Rails. Проверьте это, обратившись к маршруту Rails с добавлением
.json в конец HTTP-адреса, чтобы увидеть необработанные данные, передаваемые клиенту. Это подтвердит работоспособность стороны Rails в GET-запросе.
- Рассматривайте контроллер Ember как модуль для обработки «действий в интерфейсе» и задач, которые могут потребовать передачи обратно на бэкенд (вы также можете обрабатывать действия в маршрутах, но я отвлекся! :D)
- Роутер Ember соединяет бэкенд с остальной частью фронтенда, настраивая модель для шаблона, его компонентов и/или контроллера для использования.
- Используйте существующие решения: изучите все официальные плагины и плагины Pavilion на GitHub, чтобы понять, как реализованы аналогичные действия/цели. Всё это с открытым исходным кодом — используйте это, копируйте, следуйте соглашениям (особенно тем, что приняты в ядре Discourse!)!

Спасибо, я последую вашему совету и буду держать вас в курсе 
Я удалил всё, что делал вчера, и начал сначала с нуля. Позвольте показать вам, что я уже сделал на данный момент, и с какой проблемой (или проблемами) я сейчас столкнулся. В данный момент меня не особенно волнует редактирование файлов /locales .yml — я зашил весь текст напрямую в код, а также решил использовать классический HTML вместо Handlebars (к этому я вернусь, когда у меня будет что-то работающее).
- Я добавил опцию банковского перевода
../discourse-subscriptions/assets/javascripts/discourse/templates/subscribe/show.hbs
<hr>
<h3>Банковский перевод</h3>
<form action="/payment_intent" method="post">
<!-- some data-->
<input type="submit" value="Далее" class="btn btn-primary ">
</form>
<hr>
- Я создал контроллер payment_intent
../discourse-subscriptions/app/controllers/discourse_subscriptions/payment_intents_controller.rb
module DiscourseSubscriptions
class PaymentIntentsController < ::ApplicationController
include DiscourseSubscriptions::Stripe
include DiscourseSubscriptions::Group
before_action :set_api_key
requires_login except: [:index, :contributors, :show]
def create
params.require([:source, :plan])
begin
#customer = find_or_create_customer(params[:source])
# create a test payment intent
bk_payment_intent = Stripe::PaymentIntent.create({
amount: 1099,
currency: 'eur'
})
render json: payment_intent
end
end
end
- Его маршрут
../discourse-subscriptions/config/routes.rb
resources :payment_intents, only: %i[create]
Но когда я запускаю проект и захожу в инспектор Ember, он сообщает, что маршрут не существует
И после этого, какой будет лучший способ обработки отправки формы? Стоит ли создать ещё один контроллер Ember, использовать контроллер subscribe-show.js или добавить тег script внутри subscribe/show.hbs?
Для этого экрана вам нужен маршрут Ember и контроллер Ember. Я не вижу их здесь, так что речь о «ещё одном»?
Обязательно ознакомьтесь с:
Руководства Ember.js — Руководства и учебные пособия — Руководства Ember (emberjs.com)
Также посмотрите код экранов настроек пользователя — это базовый набор форм.
Хорошо. Спасибо за ваш ответ.