Вы сможете решить эту проблему с помощью фоновой системы заданий, такой как Resque или Delayed Job.
Вы можете создать ночное задание, которое проверяет все ваши бесплатные учетные записи и проверяет метку времени обновления и отменяет ролькогда срок их бесплатной пробной версии истекает.
Ниже приведен пример того, как будет выглядеть этот помощник Account.revoke_expired_premium_roles (), который вы будете вызывать в ночной фоновой работе или в задаче cron:
class Account < ActiveRecord::Base
# assumes Timestamp field trial_expires_at set to 2.months.from_now by default on trial start
named_scope :trial_expired, lambda {{ :conditions => ['trial_expires_at <= ?', Time.now] }}
def self.revoke_expired_premium_roles
trial_expired.find_each {|account| account.revoke_premium_role}
end
def revoke_premium_role
# Remove can-can authorization here
end
end