0

红宝石条纹

我正在尝试与 Ruby Stripe 库进行交互,特别是使用这里记录的 subscription_update 函数:https ://stripe.com/docs/api#update_subscription

这是语法的样子:

c = Stripe::Customer.retrieve("cus_2BWdBuTAE3HboP")
c.update_subscription(:plan => "basic", :prorate => true)

实现 Rails 模型

我正在实现一个可以与 ruby​​ 库交互的 rails 模型。由于此 api 将使用 nil 值更新我的订阅(这将覆盖默认值),因此我需要一个函数来抓取可写属性并创建一个仅包含非 nil 属性的数组,我可以将其传递给此 update_subscription 函数。

这是我现在拥有的:

  def get_non_nil_update_attributes
    attributes = Array.new([ :plan, :trial_end, :quantity, :coupon, :prorate ])
    return_attributes = {}

    attributes.each do |attribute|
      if !self.send( attribute ).nil?
        return_attributes[attribute] = self.send( attribute)
      end
    end

    return return_attributes
  end

我只想这样称呼:

c.update_subscription( mymodel.get_non_nil_update_attributes )

但是我收到一个错误,我没有传入计划参数。如果这个函数是,在控制台我的输出:

[{:plan=>"7"}, {:trial_end=>"bla"}]

我知道这只是一个简单的红宝石问题,但我如何使这个输出只是 :plan => "7", :trial_end => "bla"为了传递给我的函数?

4

1 回答 1

0

get_non_nil_update_attributes无法返回您帖子中存在的数组,因此正在发生其他事情。

顺便说一句,您可以大大简化此方法:

def get_non_nil_attributes(attributes = [:plan, :trial_end, :quantity, :coupon, :prorate])
  all_attributes = Hash[*attributes.zip(attributes.map {|a| send a})]
  all_attributes.select {|k, v| v.present? }
end
于 2013-07-13T20:06:53.050 回答