Добавление новых контроллеров и маршрутов в плагин Discourse-subscriptions

Здравствуйте,
Мне нужна помощь. Я привык разрабатывать полнофункциональные приложения, но в отношении 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!)! :slight_smile:

Спасибо, я последую вашему совету и буду держать вас в курсе :slightly_smiling_face:

Я удалил всё, что делал вчера, и начал сначала с нуля. Позвольте показать вам, что я уже сделал на данный момент, и с какой проблемой (или проблемами) я сейчас столкнулся. В данный момент меня не особенно волнует редактирование файлов /locales .yml — я зашил весь текст напрямую в код, а также решил использовать классический HTML вместо Handlebars (к этому я вернусь, когда у меня будет что-то работающее).

  1. Я добавил опцию банковского перевода
../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>
  1. Я создал контроллер 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
  1. Его маршрут
    ../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)

Также посмотрите код экранов настроек пользователя — это базовый набор форм.

Хорошо. Спасибо за ваш ответ.