From 99113218871b361897a70f9903df2bef593843a4 Mon Sep 17 00:00:00 2001 From: Luis Castro Date: Mon, 19 Aug 2019 15:33:04 +0200 Subject: [PATCH] feat(subscription): run validations when needed * add optional params for user. * accept nested attrs for both :user and :plan --- app/models/subscription.rb | 13 ++++++++++--- spec/models/subscriptions_spec.rb | 1 - 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/models/subscription.rb b/app/models/subscription.rb index 1479d0fc..b1a22d97 100644 --- a/app/models/subscription.rb +++ b/app/models/subscription.rb @@ -1,9 +1,16 @@ # frozen_string_literal: true class Subscription < ApplicationRecord - belongs_to :user + belongs_to :user, optional: true belongs_to :plan - validates :user_id, :plan_id, presence: true - validates :user_id, uniqueness: { scope: %i[plan_id active] } + accepts_nested_attributes_for :user + accepts_nested_attributes_for :plan + + validates :plan_id, presence: true + validates :user_id, uniqueness: { scope: %i[plan_id active] }, if: :user? + + def user? + !user_id.blank? + end end diff --git a/spec/models/subscriptions_spec.rb b/spec/models/subscriptions_spec.rb index 244502c7..3240f15d 100644 --- a/spec/models/subscriptions_spec.rb +++ b/spec/models/subscriptions_spec.rb @@ -15,7 +15,6 @@ end describe 'validations' do - it { is_expected.to validate_presence_of(:user_id) } it { is_expected.to validate_presence_of(:plan_id) } it { is_expected.to validate_uniqueness_of(:user_id).scoped_to(:plan_id, :active).ignoring_case_sensitivity } end