Ruby on Rails:如何迭代参数并将任何空字符串转换为控制器中的 nil 值



Rails新手在这里。

我与 stripe 集成,用户可以在其中更新其卡上的账单地址,但是,stripe 不接受空字符串,只接受 nil 值,例如,用户可能不需要填写第二个地址行。

我将如何遍历从表单接收的参数并将空字符串转换为 nil?

我有一个处理条纹相关任务的条纹工具模块。

在我的控制器中,我有:

   def add_billing_address
   account_id = current_user.account_id
   account = Account.find_by(id: account_id)
   stripe_id = account.stripe_customer_id
# convert params empty strings to nil here
   StripeTool.add_billing_address(stripe_id: stripe_id,
                                stripe_token: params[:stripeToken],
                                address_line1: params[:address_line1],
                                address_line2: params[:address_line2],
                                address_city: params[:address_city],
                                address_state: params[:address_state],
                                address_zip: params[:address_zip]
                                )
# redirects and error handling happens after this

您可以在控制器中的参数哈希上调用 .map .each,如下所示:

params.each do |key, value|
  params[key] = nil if value === ''
end

但是,当字段不包含数据时,最好让表单返回 nil 值。

我建议避免修改params对象中的值,因为就地更改它们不是好的做法。最好创建一个具有要使用的值的新对象。

stripe_params = params.select { |_,v| v.present? }

这将创建一个没有任何空白属性的新对象。我猜如果一个属性是零,你最好根本不传递它。

最新更新