You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据布尔值配置隐藏指定Stripe付费按钮?

解决方案:根据教练设置动态显示Stripe套餐按钮

我来帮你搞定这个需求,核心思路就是把教练设置里的布尔开关和对应的Stripe套餐关联起来,只渲染那些被教练启用的套餐按钮。下面分步骤实现:

步骤1:建立套餐ID与教练属性的映射

首先,我们需要把你的@usd_plans里的套餐ID,和数据库中教练的布尔字段对应起来,避免硬编码出错。在你的controller里添加这段代码:

# 放在@usd_plans定义的下方
@plan_to_coaching_field = {
  'basic_usd': :basic_coaching,
  'professional_usd': :professional_coaching,
  'premium_usd': :premium_coaching,
  'platinum_usd': :platinum_coaching
}

步骤2:过滤出教练启用的套餐

接着,我们从@usd_plans中筛选出教练已经启用的套餐,这样view里就不用再做判断了:

@enabled_usd_plans = @usd_plans.select do |plan_id, description|
  # 通过send方法动态获取教练对应的属性值
  @user.send(@plan_to_coaching_field[plan_id])
end

步骤3:修改View渲染启用的套餐

最后,把view里的循环对象从@usd_plans改成@enabled_usd_plans,这样只有启用的套餐才会渲染Stripe按钮:

- @enabled_usd_plans.each do |plan_id, description|
  td
    = form_tag(subscriptions_path) do
      = hidden_field_tag 'plan', plan_id
      = hidden_field_tag 'coach_id', @user.id
      = hidden_field_tag 'user_id', current_user.id
      = hidden_field_tag 'description', description
      - if current_user.coupon_code
        = hidden_field_tag 'coupon_code', current_user.coupon_code

      script.stripe-button(
        src='https://checkout.stripe.com/checkout.js'
        data-key=Rails.configuration.stripe[:publishable_key]
        data-name="#{@user.name}"
        data-description=description
        data-image="#{@user.avatar.url}"
        data-locale='auto'
        data-panel-label='Subscribe now'
        data-label='Buy'
        data-allow-remember-me='false'
        data-email=current_user.email
    )

备选方案:直接在View中判断(适合简单场景)

如果不想修改controller,也可以直接在view里添加判断逻辑,把映射关系写在循环里:

- @usd_plans.each do |plan_id, description|
  # 建立临时映射
  - field_map = {
    'basic_usd': :basic_coaching,
    'professional_usd': :professional_coaching,
    'premium_usd': :premium_coaching,
    'platinum_usd': :platinum_coaching
  }
  # 判断当前套餐是否被教练启用
  - if @user.send(field_map[plan_id])
    td
      = form_tag(subscriptions_path) do
        # 原有的form内容保持不变
        ...

不过更推荐第一种方案,把数据处理逻辑放在controller,让view专注于渲染,代码结构更清晰。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:15:04