Closed Foxtrot40 closed 4 years ago
@kairon-v por favor dê uma olhada na função /backend/models/contract.rb#base_url
, pois estou com dúvida se a escolha será correta nos diferentes ambientes da aplicação. No momento só está indo pra localhost ou ambiente de homologação.
Você pode declarar a URL desejada no routes.rb com o objetivo de usar apenas os helpers, sem a necessidade de criar um método na model (isso não é nem recomendado).
O rails conta com uma opção para definir o domínio direto no arquivo do ambiente. Ex. no arquivo config/environments/development.rb
:
config.action_mailer.default_url_options = { host: 'localhost', port: '3000' }
Você pode declarar a URL desejada no routes.rb com o objetivo de usar apenas os helpers, sem a necessidade de criar um método na model (isso não é nem recomendado).
O rails conta com uma opção para definir o domínio direto no arquivo do ambiente. Ex. no arquivo
config/environments/development.rb
:config.action_mailer.default_url_options = { host: 'localhost', port: '3000' }
No caso @kairon-v eu receio usar essa configuração pois pode gerar conflito no futuro, já que ela é feita para determinar a url da API e não do frontend. Também não posso usar o helper porque a URL do frontend é bem diferente da que eu conseguiria com os helpers (contracts/1
ao invés de introduction/:token
).
Acredito que o receio com relação a conflitos não faz sentido, pois a integração da API + Frontend é via GraphQL.
O Rails já oferece uma forma de definir domínio por ambiente, helpers para construir urls com estes domínios de maneira automática. Por que não utilizar?
Além disso, da forma que está agora, fere um princípio de S.O.L.I.D chamado Single Responsability Principle. Está sendo adicionado a uma model a responsabilidade de definir a URL que vai ser utilizada em um email. O método não usa nenhum atributo do objeto.
Se precisarmos fazer o mesmo para outros emails?
Por isso, sugiro definir o parâmetro config.action_mailer.default_url_options
em cada ambiente e adicionar a rota:
get '/login/:token', to: redirect('/'), as: :login_by_token
O próprio framework irá criar um helper: login_by_token_path
.
Em routes.rb
.
Descrição
Criei o método
send_email_new_contract
para ser executado antes do contrato ser criado, com ajuda do helperbefore_create
, esse método apenas envia um email para o usuário usando oSendgridMailer
. Para criar a rota que deverá ser enviada para o botão do email tem o métodobase_url
que checa se o ambiente é de desenvolvimento, retornando localhost, ou retorna a url de produção.Checklist