Elixir 如何使用条纹长生不老药捕获和存储用户的电子邮件

Elixir 如何使用条纹长生不老药捕获和存储用户的电子邮件,elixir,stripe-payments,phoenix-framework,stripe-elixir,Elixir,Stripe Payments,Phoenix Framework,Stripe Elixir,我有以下代码,我能够创建新用户。电子邮件未存储 代码: 如何捕获和存储他们的电子邮件 我可以发现这段代码有两个小故障: 在Elixir的文字/术语中,单引号和双引号之间存在显著差异。区别在中有详细描述,一般来说是:用于字符列表的单引号与二进制文件(字符串)基本上没有共同之处 看: iex | 1▶ 'abc'=[97,98,99] #⇒真的 “abc”基本上与(伪代码中的)相同 [ ascii值(字符a), ascii值(字符b), ascii值(字符c) ] 这可能应该被认为是从XX世纪

我有以下代码,我能够创建新用户。电子邮件未存储

代码:


如何捕获和存储他们的电子邮件

我可以发现这段代码有两个小故障:

  • 在Elixir的文字/术语中,单引号和双引号之间存在显著差异。区别在中有详细描述,一般来说是:用于字符列表的单引号与二进制文件(字符串)基本上没有共同之处
  • 看:

    iex | 1▶ 'abc'=[97,98,99]
    #⇒真的
    
    “abc”
    基本上与(伪代码中的)相同

    [
    ascii值(字符a),
    ascii值(字符b),
    ascii值(字符c)
    ]
    
    这可能应该被认为是从XX世纪遗留下来的遗产。每当需要二进制(字符串)时,请始终使用双引号

  • 另一个问题是您分配并立即放弃从Stripe.Customer.create返回的值。这不太可能是你真正想要做的;要将其传递给底层控制器,请使用(或至少验证)调用
    create
    函数的结果,并以某种方式处理错误

  • 总之,可能稳健的解决方案如下所示:

    defmodule StripeTestWeb.PaymentController do
    使用StripeTestWeb,:控制器
    使用Stripe.API
    def索引(conn,%{“stripeEmail”=>email}=_参数)do
    使用{:ok,customer\u data}赋值(:customer\u data,customer\u data)
    |>呈现(“index.html”)
    其他的
    #呈现错误页面
    结束
    结束
    结束
    
    从参数获取时,应使用双引号而不是单引号。
    conn.body_参数['stripeEmail']!=conn.body_参数['stripeEmail']
    。还有,为什么在
    params
    参数上使用
    conn.body\u params
    而不是模式匹配?单引号生成字符列表而不是binary@AbM我在写JS后就开始使用Elixir,我习惯了对象。坏习惯当我使用with语句时,我会出错。我不太熟悉,不知道你在做什么我们有一个文档。不幸的是,我不能提供任何帮助,除非你至少有什么错误可以分享。
        defmodule StripeTestWeb.PaymentController do
          use StripeTestWeb, :controller
          use Stripe.API
    
          def index(conn, _params) do
    
            {:ok, customer_data} = Stripe.Customer.create(%{email: conn.body_params['stripeEmail']})
    
            render(conn, "index.html")
          end
        end