gpt4 book ai didi

ruby-on-rails - 使用 devise 控制用户订阅

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:28 25 4
gpt4 key购买 nike

我正在向我的应用程序添加对订阅的支持。

我希望它的工作方式是用户从免费帐户开始,然后可以切换到高级帐户。这将自动续订,但如果用户停止付款或取消订阅,将在月底停止。

我对如何让它发挥作用有些困惑,我不太确定如何处理它。

我使用 cancan 为用户配置了权限。

来自 models/user.rb:

 ROLES = [:admin, :premium, :free]

def roles=(roles)
self.roles_mask= (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end

def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end

def has_role?(role)
roles.include? role
end

def has_one_of_roles?(roles_array)
not (roles & roles_array).empty?
end

def upgrade_plan (role)
return false unless ROLES.include? role
self.roles = [ role ]
self.save
end

我有一个订阅 Controller controllers/subscription_controller.rb:

  def create

@subscription = Subscription.new(params[:subscription])
@subscription.user_id = current_user.id
@subscription.expiration_date = 1.month.from_now

respond_to do |format|
if @subscription.save
if current_user.upgrade_plan :premium
format.html { redirect_to trades_path, notice: 'Subscription was successfully created. Compliments you are now subscribed to the premium plan' }
format.json { render json: trades_path, status: :created, location: @subscription }
else
format.html { redirect_to home_pricing_path, notice: 'Error while upgrading your account, please contact us' }
format.json { render json: home_pricing_path, status: :created, location: @subscription }
end
else
format.html { render action: "new" }
format.json { render json: @subscription.errors, status: :unprocessable_entity }
end
end
end

虽然在我看来在数据库中订阅有点多余,但仍然只检查用户角色。

另外,通过这种方式我应该在每次请求时检查订阅的有效性,这样我就可以在用户角色过期时更新它,这似乎太繁重了。

你会如何处理这种情况?

谢谢,

最佳答案

您不需要在每个请求上检查订阅,因为过期是基于时间的,您需要为过期订阅创建 rake 任务并将其添加到服务器上的 cron 以每天调用一次。

您可以阅读有关自定义 rake 任务的信息 here .

关于ruby-on-rails - 使用 devise 控制用户订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com