Olá,
Preciso de ajuda, estou acostumado a criar aplicações fullstack, mas em relação a Ember e Rails, ainda sou iniciante.
Quero adicionar outro método de pagamento (transferência bancária) ao plugin discourse-subscriptions. Já consegui criar algumas novas rotas e adicionar alguns recursos a ele, mas estou com dificuldades para adicionar um novo controller ao diretório /discourse_subscriptions/controllers e fazê-lo funcionar corretamente.
Quero configurar um controller Ruby que atuará como servidor e um template Ember como meu cliente, a estrutura é a seguinte:
Após criar a intenção de pagamento, o controller payment_intent deve retornar as instruções de pagamento necessárias ao cliente.
Mais detalhes: Stripe - aceitar transferências bancárias
Já criei novas páginas adicionando métodos no arquivo subscribe_controller.rb na pasta discourse_subscriptions/controllers, mas quando tento criar outro controller (o servidor), ele não funciona, exibe um erro 404. No entanto, no inspetor Ember, vejo que a rota realmente existe (sim, é realmente confuso).
NB: Criei todas as rotas correspondentes e seus tipos de método nos arquivos routes.rb e subscriptions-route-map.js.
Criei um controller Ruby payment_intent e uma rota correspondente. O controller deve receber uma requisição POST do cliente e gerar uma intenção de pagamento Stripe com base nos dados recebidos na requisição POST. Após a criação da intenção de pagamento, ele deve retornar as instruções de pagamento necessárias ao cliente.
No lado do cliente, tenho um pequeno formulário com um botão de envio.
Não consigo estabelecer a comunicação entre este controller e a página do cliente (servidor-cliente). O fato de existirem dois controllers (Rails e Ember) é um pouco confuso.
3 curtidas
Ótimo progresso. Como sua primeira incursão no desenvolvimento de plugins do Discourse, isso é definitivamente ambicioso. A vantagem disso é a sensação de realização e utilidade que você terá assim que conseguir fazer isso funcionar. O risco que você corre aqui é que está mordendo tanto de uma vez que pode te desanimar a continuar trabalhando na plataforma. A combinação Ember/Rails é bastante coisa para assumir, especialmente inicialmente, continue assim!
Algumas dicas por enquanto:
- Aborde as coisas em blocos.
- Enviar o fork para o GitHub, e depois criar links permanentes para seções de código aqui pode ajudar a comunidade a ver o que você está fazendo com mais clareza.
- Primeiro, preocupe-se com os dados que descem do seu controlador Rails, verifique isso acessando a rota Rails com
.json no final do endereço http para ver os dados brutos que estão sendo passados para o cliente. Isso provará o lado Rails do GET.
- Pense no Controlador Ember como o módulo para lidar com “ações na interface” e coisas que podem ter que ser enviadas de volta para o back-end (você pode lidar com ações em Rotas também, mas estou divagando! :D)
- O Roteador Ember conecta o back-end ao resto do front-end, configurando o modelo para que o Template, seus Componentes e/ou Controlador consumam.
- Use exemplos anteriores, revise todos os plugins oficiais e do Pavilion no GitHub para ver como as coisas são feitas para ações/propósitos semelhantes. É tudo open source, aproveite, copie, siga as convenções (especialmente as do core do Discourse)!

4 curtidas
Obrigado, seguirei seu conselho e o manterei informado 
1 curtida
Eu deletei tudo o que fiz ontem e comecei do zero novamente. Deixe-me mostrar o que já fiz até agora e os problemas que estou enfrentando atualmente. Por enquanto, não me importo em editar os arquivos /locales.yml, pois codifiquei todo o texto e também decidi usar HTML clássico em vez de Handlebars (voltarei a isso assim que tiver algo que funcione).
-
Adicionei a opção de transferência bancária
../discourse-subscriptions/assets/javascripts/discourse/templates/subscribe/show.hbs
<hr>
<h3>Transferência Bancária</h3>
<form action="/payment_intent" method="post">
<!-- alguns dados-->
<input type="submit" value="Próximo" class="btn btn-primary ">
</form>
<hr>
-
Criei um controlador de 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])
# criar um pagamento de teste
bk_payment_intent = Stripe::PaymentIntent.create({
amount: 1099,
currency: 'eur'
})
render json: payment_intent
end
end
end
-
É a rota
../discourse-subscriptions/config/routes.rb
resources :payment_intents, only: %i[create]
Mas quando executo o projeto e vou ao inspetor do Ember, ele me diz que a rota não existe
E depois disso, qual seria a melhor maneira de lidar com o envio do formulário? Devo criar outro controlador Ember, usar o controlador subscribe-show.js ou adicionar uma tag de script dentro do subscribe/show.hbs?
Você precisa de uma rota Ember para esta tela e um controller Ember. Não vejo um aqui, então “outro”?
Certifique-se de consultar:
Guias Ember.js - Guias e Tutoriais - Guias Ember (emberjs.com)
E dê uma olhada no código das telas de preferências do usuário, que é um conjunto básico de formulários.
2 curtidas
Ok. obrigado pela sua resposta