Это соглашение совершенно неверно.
Subscription.where(:subscription_plan => "Yearly")
будет правдивым в большинстве случаев, потому что он предназначен для всего Подписки модели данных. Если одна из записей Yearly
, это правда.
Вместо запроса всей модели, сделайте это по собственным данным пользователя.
Пусть пользователь имеет одну подписку, то
def save_with_payment
subscription.yearly? ? extend_one_year : extend_one_month
end
def extend_one_year
update_attributes(expiry_date: Date.today.next_year)
end
# def extend_one_year
Или еще лучше, такой простирающуюся логика должна принадлежит Подписка а не пользователя. Переместите его туда. А также «Расскажите, не спрашивайте»
class Subscription < ActiveRecord::Base
belongs_to :user
def next_extend_date
next_date = subscription_plan.yearly? ? 'next_year' : 'next_month'
Date.today.send next_date
end
end
class User < ActiveRecord::Base
has_one :subscription
def save_with_payment
extend_to subscription.next_extend_date
end
# But I'm not sure if such logic still need to be in Subscrption.
def extend_to(date)
update_attribute expiry_date: date
end
end
Объясните мне логику вашего приложения. Теперь он говорит: Если есть какие-либо годовые подписки, установите expiry_date equal next_year –