Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从Rails中的update_属性中排除空值_Ruby On Rails_Ruby_Stripe Payments - Fatal编程技术网

Ruby on rails 如何从Rails中的update_属性中排除空值

Ruby on rails 如何从Rails中的update_属性中排除空值,ruby-on-rails,ruby,stripe-payments,Ruby On Rails,Ruby,Stripe Payments,我正在尝试处理Invoice.created的条带Webhook,并希望保存发票行项目。我的挑战是文件变量根据行项目类型而变化 在尝试导入行项目时,我收到了nil:NilClass的未定义方法“name”,因为根据行项目的类型,计划对象可能为null 我可以通过将update_属性分为2来解决这个问题,只有在计划对象存在的情况下才会发生。以下是我将要开始工作的内容。我希望有更好的办法 @invoice_line_item = InvoiceLineItem.where(stripe_line

我正在尝试处理Invoice.created的条带Webhook,并希望保存发票行项目。我的挑战是文件变量根据行项目类型而变化

在尝试导入行项目时,我收到了nil:NilClass的未定义方法“name”,因为根据行项目的类型,计划对象可能为null

我可以通过将update_属性分为2来解决这个问题,只有在计划对象存在的情况下才会发生。以下是我将要开始工作的内容。我希望有更好的办法

  @invoice_line_item = InvoiceLineItem.where(stripe_line_item_id: line_item.id).first_or_create(invoice_id: @invoice.id)
  @invoice_line_item.update_attributes(
    amount: line_item.amount,
    currency: line_item.currency,
    period_start: Time.at(line_item.period.start).strftime("%m-%d-%Y"),
    period_end: Time.at(line_item.period.end).strftime("%m-%d-%Y"),
    proration: line_item.proration,
    item_type: line_item.type)
  if line_item.plan.present?
    @invoice_line_item.update_attributes(
      plan_name: line_item.plan.name,
      plan_interval: line_item.plan.interval,
      plan_amount: line_item.plan.amount,
      trial_period_days: line_item.plan.trial_period_days)
  end 
你可以试试

行项目。计划。尝试:名称

对于所有的行_item.plan元素也是如此

如果主题为零,Try-in-rails将为零

它实际上并不排除nil值,但如果line_item.plan为nil,则子值也将为nil。如果这是正确的行为,那么你应该试试

更新:我今天早上刚看到这篇coderwall文章,其中提到了使用带有allow_nil:true的委托。你能做些类似的事情吗

class InvoiceLineItem < ActiveRecord::Base

  delegate :name, :interval, :amount, :trial_period_days, to: :plan, allow_nil: true

  ... rest of the class ...

end

然后再仔细观察,我想知道为什么要更新行_项上的所有计划属性(如果它们通过关系可用)?我遗漏了什么吗?

plan对象是stripe中散列的一部分。我的应用程序中没有计划模型。当您对订阅计划收费时,stripe将使用该计划。如果您为非订阅费用付费,则散列中的计划对象为空。现在就试试。