为Discourse-subscriptions插件添加新的控制器和路由

你好,
我需要帮助,我习惯于创建全栈应用程序,但在 Ember 和 Rails 方面我还是初学者。

我想为 discourse-subscriptions 插件添加另一种付款方式(银行转账)。我已经成功创建了一些新路由并添加了一些功能,但在向 /discourse_subscriptions/ 控制器目录添加新控制器并使其正常工作方面遇到了困难。

我想设置一个 Ruby 控制器作为服务器,并使用 Ember 模板作为客户端,结构如下:

创建付款意图后,payment_intent 控制器必须将必要的付款说明返回给客户端。
更多详情:Stripe - 接受银行转账

我已经通过在 discourse_subscriptions/ 控制器文件夹中的 subscribe_controller.rb 文件中添加方法来创建新页面,但当我尝试创建另一个控制器(服务器)时,它不起作用,显示 404 错误。然而,在 Ember Inspector 中,我看到路由确实存在(是的,这真的很令人困惑)。

注意:我已经将所有相应的路由及其方法类型创建在 routes.rbsubscriptions-route-map.js 文件中。

我创建了一个 Ruby payment_intent 控制器和一个相应的路由,该控制器应接收来自客户端的 POST 请求,并根据 POST 请求收到的数据生成 Stripe 付款意图,在创建付款意图后,它应将必要的付款说明返回给客户端
在客户端,我有一个带提交按钮的小表单。

我无法建立此控制器与客户端页面之间的通信(服务器-客户端),存在两个控制器(Rails 和 Ember)这一事实有点令人困惑

3 个赞

进展很顺利。作为您首次涉足 Discourse 插件开发,这无疑是雄心勃勃的。好处是,一旦您成功完成这项工作,您将获得成就感和实用性。您面临的风险是,一次承担太多任务可能会让您对继续在该平台工作望而却步。Ember/Rails 的组合需要学习的东西很多,尤其是在初期,请继续努力!

以下是一些暂时的建议:

  • 分块处理任务。
  • 将您的 fork 推送到 GitHub,然后在代码的相应部分添加永久链接,这可能有助于社区更清楚地了解您正在做什么。
  • 首先关注来自 Rails 控制器的数据,通过在 HTTP 地址末尾添加 .json 来访问 Rails 路由,以查看传递给客户端的原始数据。这将验证 GET 请求的 Rails 端。
  • 将 Ember Controller 视为处理“界面内操作”以及可能需要推送到后端的事务的模块(您也可以在 Routes 中处理操作,但这是题外话!:D)。
  • Ember Router 连接后端与前端的其余部分,为模板、组件和/或控制器设置模型以供使用。
  • 借鉴先例,查看 GitHub 上所有官方和 Pavilion 插件,了解类似操作/目的的实现方式。一切都是开源的,利用它,复制它,遵循约定(尤其是 Discourse 核心的约定!)!:slight_smile:
4 个赞

谢谢,我会听取您的建议并及时向您汇报 :slightly_smiling_face:

1 个赞

我已经删除了昨天所做的一切,并从头开始。让我向您展示到目前为止我已经完成的工作以及我目前面临的问题。目前我并不真正关心编辑 /locales .yml 文件,我已经硬编码了所有文本,我也决定使用经典的 HTML 而不是 Handlebars(一旦有可用的东西,我会回来处理它)。

  1. 我添加了银行转账选项

    ../discourse-subscriptions/assets/javascripts/discourse/templates/subscribe/show.hbs
    
          <h3>银行转账</h3>
          <form action="/payment_intent" method="post">
           <!-- 一些数据-->
            <input type="submit" value="下一步" class="btn btn-primary ">
          </form>
          <hr>
    
  2. 我创建了一个 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])
              # 创建一个测试支付意图
              bk_payment_intent = Stripe::PaymentIntent.create({
                amount: 1099,
                currency: 'eur'
              })
    
              render json: payment_intent
            end
        end
    end
    
  3. 这是它的路由
    ../discourse-subscriptions/config/routes.rb

    resources :payment_intents, only: %i[create]
    

    但是当我运行项目并在 Ember Inspector 中查看时,它告诉我路由不存在

    之后,处理表单提交的最佳方法是什么?我应该创建另一个 Ember 控制器,使用 subscribe-show.js 控制器,还是在 subscribe/show.hbs 中添加一个 script 标签?

你需要一个 Ember 路由来处理这个屏幕和一个 Ember 控制器。我在这里没看到,所以“另一个”?

请务必查看:

Ember.js 指南 - 指南和教程 - Ember 指南 (emberjs.com)

并查看用户偏好设置屏幕的代码,这是一组基本的表单。

2 个赞

好的,感谢您的回复