ActiveRecord has_one同时保留旧记录--Rails 5.2

时间:2018-05-18 05:11:17

标签: ruby-on-rails ruby activerecord stripe-payments

我正在开发一个集成Stripe Billing API的Rails 5.2项目(使用stripe-ruby gem)。我创建了一个Subscription模型,并且需要设置与Customer模型的关联。

我要做的是拥有has_one :subscriptionbelongs_to :customer,以便调用customer.subscription将返回该客户的唯一订阅对象。但是,为了保持记录,我想保留has_one功能,但不知何故能够保留已取消的订阅记录(即客户可能有三个以前取消的订阅记录,但是调用{{1除非最新的订阅记录仍处于“活动状态”,否则返回customer.subscription

任何想法最好的方法是什么?

我能想到的一种方法是将其设置为nil,然后设置has_many模型方法(即:Customer)以返回最近的方法和有效的订阅记录。这会是要走的路吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

作为将has_many :subscriptionshas_one :active_subscription结合使用的替代方法,您还可以使用association extension

has_many :subscriptions do
  def current
    # logic for determining active subscription
  end
end

这样做,customer.subscriptions会给你所有这些,而customer.subscriptions.current将是当前的。{1}}。

答案 1 :(得分:0)

是的,对has_many使用subscriptions关系,然后在has_one模型的active_subscription时间戳上订购created_at Subscription

请注意,执行此操作时,您应该仅使用active_subscription来获取有效订阅,而不是设置它。只需通过has_many customer.subscriptions.build方法进行设置。