こんにちは。
助けが必要です。フルスタックアプリケーションの作成には慣れていますが、EmberとRailsに関してはまだ初心者です。
Discourse-subscriptionsプラグインに別の支払い方法(銀行振込)を追加したいと考えています。いくつかの新しいルートを作成し、機能を追加することには成功しましたが、/discourse_subscriptions/ コントローラーディレクトリに新しいコントローラーを追加して正常に動作させるのに苦労しています。
サーバーとして機能するRubyコントローラーと、クライアントとしてEmberテンプレートを設定したいと考えています。構造は次のとおりです。
支払いインテントを作成した後、payment_intent コントローラーはクライアントに必要な支払い指示を返す必要があります。
詳細はこちらをご覧ください:Stripe - 銀行振込の受け入れ
discourse_subscriptions/ コントローラーフォルダの subscribe_controller.rb ファイルにメソッドを追加して新しいページを作成しましたが、別のコントローラー(サーバー)を作成しようとすると機能しません。404エラーが表示されます。しかし、Ember Inspectorではルートが実際に存在することがわかります(これは本当に混乱します)。
注:routes.rb および subscriptions-route-map.js ファイルに、対応するすべてのルートとそのメソッドタイプを作成しました。
Rubyの**payment_intent コントローラー**と対応するルートを作成しました。コントローラーは、クライアントからPOSTリクエストを受け取り、POSTリクエストで受信したデータに基づいてStripeの支払いインテントを生成する必要があります。支払いインテントが作成された後、クライアントに必要な支払い指示を返す必要があります。
クライアント側には、送信ボタン付きの小さなフォームがあります。
このコントローラーとクライアントページ(サーバー・クライアント)間の通信を確立できません。2つのコントローラー(RailsとEmber)が存在するという事実が少し混乱します。
「いいね!」 3
素晴らしい進歩です。Discourseプラグイン開発への最初の挑戦としては、間違いなく意欲的なものです。その利点は、これが機能するようになったときの達成感と有用性です。ここでリスクとなるのは、一度に多くのことを抱え込みすぎると、プラットフォームでの作業を続ける意欲を失ってしまう可能性があることです。Ember/Railsの組み合わせは、特に初期段階ではかなりの負担になりますが、頑張ってください!
当面のヒントをいくつかご紹介します。
- 物事をチャンクごとに処理する。
- フォークをGitHubにプッシュし、コードのセクションをここにパーマリンクで表示すると、コミュニティがあなたのやっていることをより明確に見ることができるかもしれません。
- まず、Railsコントローラーからの下向きデータに対処することに重点を置きます。HTTPアドレスの末尾に
.jsonを付けてRailsルートにアクセスし、クライアントに渡されている生のデータを確認してください。これにより、GETのリクエストのRails側が証明されます。
- Emberコントローラーを、「インターフェース内のアクション」やバックエンドにプッシュする必要があるかもしれないものを処理するモジュールと考えてください(ルートでもアクションを処理できますが、それはさておき!:D)。
- Emberルーターは、バックエンドとフロントエンドの残りの部分を接続し、テンプレート、コンポーネント、および/またはコントローラーが消費するためのモデルを設定します。
- 先行事例を利用すること。GitHub上のすべての公式プラグインとPavilionプラグインを確認し、同様のアクション/目的のためにどのように物事が行われているかを見てください。すべてオープンソースなので、それを活用し、コピーし、規約(特にDiscourseコアの規約!)に従ってください!

「いいね!」 4
ありがとうございます。アドバイスに従い、進捗をご報告します 
「いいね!」 1
昨日行ったことをすべて削除し、ゼロからやり直しました。ここまでに完了したことと、現在直面している問題(複数可)を以下に示します。現時点では /locales .yml ファイルの編集はあまり気にしておらず、すべてのテキストをハードコーディングしました。また、ハンドルバーではなく従来の HTML を使用することにしました(動作するものがあれば、後で戻ってきます)。
-
銀行振込オプションを追加しました
../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>
-
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
-
ルーティングです
../discourse-subscriptions/config/routes.rb
resources :payment_intents, only: %i[create]
しかし、プロジェクトを実行し、Ember Inspector にアクセスすると、ルートが存在しないと表示されます
その後、フォーム送信を処理する最善の方法は何でしょうか?別の Ember コントローラーを作成する必要がありますか? subscribe-show.js コントローラーを使用しますか、それとも subscribe/show.hbs 内にスクリプトタグを追加しますか?
この画面にはEmberルートとEmberコントローラーが必要です。ここには見当たらないので、「別の」コントローラーということでしょうか?
以下を参照してください。
Ember.js Guides - Guides and Tutorials - Ember Guides (emberjs.com)
また、基本的なフォームセットであるユーザー設定画面のコードも確認してみてください。
「いいね!」 2