ActiveRecord has_one при сохранении старых записей - Rails 5.2 - PullRequest
0 голосов
/ 18 мая 2018

Я работаю над проектом Rails 5.2, который интегрирует API Stripe Billing (используя гем stripe-ruby ).Я создал модель Subscription, и поэтому необходимо установить связь с моделью Customer.

То, что я собирался сделать, это иметь has_one :subscription и belongs_to :customer, чтобы при вызове customer.subscription возвращался один-единственный объект подписки этого клиента.Однако, ради ведения записей, я хотел бы сохранить эту функциональность has_one, но каким-то образом иметь возможность сохранять отмененные записи подписки (т. Е. У клиента может быть три ранее отмененных записи подписки, но вызов customer.subscription возвращает nil если только последняя запись о подписке все еще "активна").

Есть какие-нибудь идеи, как лучше всего это сделать?

Один из способов, который я могу придумать, - это настроить его.has_many, а затем настройте метод модели Customer (т. е. customer.subscription) для возврата одной самой последней и активной записи подписки.Это будет путь?

Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

В качестве альтернативы has_many :subscriptions в сочетании с has_one :active_subscription вы также можете использовать расширение ассоциации :

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

. При этом customer.subscriptions даст вам всеиз них, в то время как customer.subscriptions.current будет текущим.

0 голосов
/ 18 мая 2018

Да, используйте соотношение has_many для subscriptions, а затем has_one для active_subscription, заказанного для created_at отметки времени модели Subscription.

Просто помните, что когда выДля этого вы должны использовать active_subscription только для получения активной подписки, а не для ее установки.Просто установите его с помощью метода has_many customer.subscriptions.build.

...