在应用程序中,我使用户可以拥有一个帐户,每个帐户可以是免费的或高级的(使用角色和Cancan gem)。
我希望能够将免费帐户升级为高级角色并选择一个持续时间,例如2个月,然后在2个月后,帐户会自动恢复为免费角色。
这可能吗?
答案 0 :(得分:1)
您应该可以使用像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