إضافة وحدات تحكم ومسارات جديدة إلى المكون الإضافي للاشتراكات في Discourse

مرحباً،
أحتاج إلى مساعدة، لقد اعتدت على إنشاء تطبيقات fullstack ولكن فيما يتعلق بـ ember و rails ما زلت مبتدئًا.

أريد إضافة طريقة دفع أخرى (تحويل بنكي) إلى المكون الإضافي discourse-subscriptions. لقد نجحت بالفعل في إنشاء بعض المسارات الجديدة وإضافة بعض الميزات إليه، ولكني أواجه صعوبة في إضافة وحدة تحكم جديدة إلى دليل /discourse_subscriptions/ controllers وجعلها تعمل بشكل صحيح.

أريد إعداد وحدة تحكم ruby ستعمل كخادم وقالب ember كعميلي، والهيكل كالتالي:

بعد إنشاء نية الدفع، يجب أن تعيد وحدة التحكم payment_intent التعليمات اللازمة للدفع إلى العميل.
مزيد من التفاصيل: Stripe - accept bank transfers

لقد قمت بالفعل بإنشاء صفحات جديدة عن طريق إضافة طرق في ملف subscribe_controller.rb في مجلد discourse_subscriptions/ controller ولكن عندما أحاول إنشاء وحدة تحكم أخرى (الخادم) فإنها لا تعمل، وتظهر خطأ 404، ومع ذلك في فاحص ember أرى أن المسار موجود بالفعل (نعم إنه مربك حقًا).

ملاحظة: لقد قمت بإنشاء جميع المسارات المقابلة وطرقها في ملفي route.rb و subscriptions-route-map.js.

لقد قمت بإنشاء وحدة تحكم ruby payment_intent ومسار مطابق لها، يجب أن تتلقى وحدة التحكم طلب POST من العميل وتنشئ نية دفع Stripe بناءً على البيانات المستلمة مع طلب POST، وبعد إنشاء نية الدفع يجب أن تعيد التعليمات اللازمة للدفع إلى العميل.
على جانب العميل، لدي نموذج صغير مع زر إرسال.

لا يمكنني إنشاء اتصال بين وحدة التحكم هذه وصفحة العميل (خادم-عميل)، حقيقة وجود وحدتي تحكم (rails و ember) مربكة بعض الشيء.

3 إعجابات

تقدم رائع. بصفتك أول من يخوض تجربة في تطوير إضافات Discourse، فإن هذا بالتأكيد طموح. الجانب الإيجابي لذلك هو الشعور بالإنجاز والفائدة التي ستحصل عليها بمجرد أن تعمل هذه الإضافة. الخطر الذي تواجهه هنا هو أنك تأخذ الكثير دفعة واحدة مما قد يثبط عزيمتك عن مواصلة العمل على المنصة. إن مزيج Ember/Rails هو الكثير لتتعلمه، خاصة في البداية، استمر!

بعض النصائح في الوقت الحالي:

  • تعامل مع الأمور على شكل أجزاء.
  • قد يساعد دفع النسخة المتفرعة إلى GitHub، ثم ربط أقسام الكود هنا بروابط دائمة، المجتمع على رؤية ما تفعله بوضوح أكبر.
  • اهتم أولاً بالبيانات الواردة من وحدة تحكم Rails الخاصة بك، وتحقق من ذلك عن طريق معالجة مسار Rails بـ .json في نهاية عنوان HTTP لرؤية البيانات الأولية التي يتم تمريرها إلى العميل. سيثبت ذلك جانب Rails من طلب GET.
  • فكر في وحدة تحكم Ember كوحدة للتعامل مع “الإجراءات داخل الواجهة” والأشياء التي قد تحتاج إلى إعادتها إلى الواجهة الخلفية (يمكنك التعامل مع الإجراءات على المسارات أيضًا، لكنني أستطرد! :D)
  • يربط موجه Ember الواجهة الخلفية ببقية الواجهة الأمامية، ويقوم بإعداد النموذج للقالب، ومكوناته و/أو وحدة التحكم الخاصة به لاستهلاكه.
  • استخدم ما سبقك، قم بالمرور على جميع الإضافات الرسمية وإضافات Pavilion على GitHub لمعرفة كيفية القيام بالأشياء للإجراءات/الأغراض المماثلة. كل شيء مفتوح المصدر، استفد منه، انسخه، اتبع الاتفاقيات (خاصة تلك الموجودة في نواة 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>
      
  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])
          # إنشاء دفعة تجريبية
          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)

وألق نظرة على الكود الخاص بشاشات تفضيلات المستخدم، وهي مجموعة أساسية من النماذج.

إعجابَين (2)

حسنا. شكرا على ردك