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

**URL:** https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704
**Category:** Development
**Tags:** subscriptions
**Created:** [2022年七月22日 22:44 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704 "2022-07-22T22:44:19Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![martin\_junior\_tchoup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin_junior_tchoup/32/253858_2.png) [@martin\_junior\_tchoup](https://meta.discourse.org/u/martin_junior_tchoup)
#### Post date: [2022年七月22日 22:44 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704/1 "2022-07-22T22:44:19Z")

</div>

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

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

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

 ![structure](https://global.discourse-cdn.com/meta/original/4X/e/0/a/e0a70bf72faa18e84daa16da03d795512e73f225.png)

创建付款意图后，`payment_intent` 控制器必须将必要的付款说明返回给客户端。  
更多详情：[Stripe - 接受银行转账](https://stripe.com/docs/payments/bank-transfers/accept-a-payment)

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

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

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

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

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2022年七月23日 10:31 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704/2 "2022-07-23T10:31:30Z")

</div>

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

以下是一些暂时的建议：

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

---

<div class="post-metadata">

### Author: ![martin\_junior\_tchoup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin_junior_tchoup/32/253858_2.png) [@martin\_junior\_tchoup](https://meta.discourse.org/u/martin_junior_tchoup)
#### Post date: [2022年七月23日 12:45 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704/3 "2022-07-23T12:45:56Z")

</div>

谢谢，我会听取您的建议并及时向您汇报 🙂

---

<div class="post-metadata">

### Author: ![martin\_junior\_tchoup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin_junior_tchoup/32/253858_2.png) [@martin\_junior\_tchoup](https://meta.discourse.org/u/martin_junior_tchoup)
#### Post date: [2022年七月23日 15:31 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704/4 "2022-07-23T15:31:50Z")

</div>

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

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

2. **我创建了一个 payment\_intent 控制器**  
../discourse-subscriptions/app/controllers/discourse\_subscriptions/payment\_intents\_controller.rb

3. **这是它的路由**  
../discourse-subscriptions/config/routes.rb

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2022年七月23日 16:24 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704/5 "2022-07-23T16:24:21Z")

</div>

> [@martin\_junior\_tchoup](#):
>
> 我应该创建另一个 Ember 控制器吗？

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

请务必查看：

[Ember.js 指南 - 指南和教程 - Ember 指南 (emberjs.com)](https://guides.emberjs.com/v3.28.0/)

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

---

<div class="post-metadata">

### Author: ![martin\_junior\_tchoup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin_junior_tchoup/32/253858_2.png) [@martin\_junior\_tchoup](https://meta.discourse.org/u/martin_junior_tchoup)
#### Post date: [2022年七月23日 20:38 UTC](https://meta.discourse.org/t/adding-new-controllers-and-routes-to-discourse-subscriptions-plugin/233704/6 "2022-07-23T20:38:12Z")

</div>

好的，感谢您的回复
