Рельсы рендерит кнопки в действительно сложных условиях - PullRequest
0 голосов
/ 14 ноября 2018

Мои участники приложения rails могут иметь одну из двух разных ролей: vip_lite и vip.Они могут подписаться на план продления их авторизации.

У нас также есть четыре типа плана: vip_lite / помесячно, vip_lite / год, vip / месяц, vip / год.

Пользователь vip может подписаться на один из четырех планов, как и vip_lite.Участник с разными ролями и разными планами может видеть разные кнопки на странице плана (например, vip_lite и подписывающийся vip_lite / ежемесячный участник может видеть кнопку «обновить» на странице плана vip).

см. Следующий пример кода: (в настоящее время пишитев помощнике)

def plan_action_button(user)
  if user.vip? && user.subscribing_plan?(:vip_lite, :monthly)
    'button_a'
  elsif user.vip? && user.subscribing_plan?(:vip_lite, :yearly)
    'button_b'
  elsif user.vip? && user.subscribing_plan?(:vip, :monthly)
    'button_c'
  elsif user.vip? && user.subscribing_plan?(:vip, :monthly)
    'button_d'
  elsif user.vip_lite? && user.subscribing_plan?(:vip, :monthly)
    'button_e'
  elsif user.vip_lite? && user.subscribing_plan?(:vip, :yearly)
    'button_e'      

    ... and so on...
  end
end

Поэтому мне приходится иметь дело с 2 * 4 = 8 условиями для каждой кнопки на этих страницах.Есть ли в рельсах хороший образец для решения такого случая?Спасибо

1 Ответ

0 голосов
/ 14 ноября 2018

Есть несколько интересных шаблонов, которые вы можете использовать здесь.Давайте посмотрим, что повторяется больше всего: user.vip?

Давайте начнем метод с защитного предложения

def plan_action_button(user)
  return 'whatever you need to return' unless user.vip?

  if user.subscribing_plan?(:vip_lite, :monthly)
   'button_a'
[...]

Тогда, поскольку существует много комбинаций, трудно сказать, какие изменения и что осталосьто же самое для тех кнопок.Это ключ I18n?Является ли кнопка тег с разными ссылками?Есть ли у вас доступ к этим частям, таким как user.plan_name и user.plan_frequency?

Ответы на эти вопросы помогут вам во многом увидеть появление шаблона.

...