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? }
这将创建一个没有任何空白属性的新对象。我猜如果一个属性是零,你最好根本不传递它。