Создайте пробный период для веб-приложения ruby ​​on rails - PullRequest
6 голосов
/ 16 июня 2011

Может ли кто-нибудь сказать мне, как лучше всего реализовать 30-дневный испытательный период для веб-приложения ruby ​​on rails, так же, как это делает Basecamp из 37 сигналов ?

На данный момент у меня есть страница регистрации пользователей, которая затем предоставляет пользователю доступ к панели инструментов, отображающей текущую информацию о своих продуктах / ценах и т. Д.

Я бы хотел, чтобы пользователи могли регистрироваться и иметь полную функциональность приложения, срок действия которой истекает через 30 дней.

Спасибо

Ответы [ 5 ]

9 голосов
/ 23 августа 2013

Создать приложение Rails для x дней пробного периода довольно просто.

Вы хотите установить 30-дневный пробный период для своих пользователей, а затем:

шаг 1: создайте эти методы в application_controller.rb как

# application_controller.rb
class ApplicationController < ActionController::Base
 # make expire_on method available for all the controllers
 helper :all
 helper :remaining_days


 # find the remaining trial days for this user
 def remaining_days
  ((current_user.created_at + 30.days).to_date - Date.today).round
 end

 def trial_expired?
  # find current_user who is login. If you are using devise simply current_user will works
  # now that you have remaining_days, check whether trial period is already completed
  if remaining_days <= 0
     redirect_to expires_path
  end
 end
end

Шаг 2: Показать оставшиеся дни испытаний в application.html.erb

# application.html.erb
<html>
  <head></head>
  <body>
    <span style="color:red"> Your trial period will expire on <%= remaining_days %></span>  Days. Suscribe
  </body>
 </html>

шаг 3: в каждом контроллере напишите

class YourController < ApplicationController
 before_filter trial_expired?
end

, чтобы, если пробная версия уже истекла, она не открывала доступ к вашей странице, а перенаправляла пользователя обратно на страницу с сообщением об ошибке.

Теперь создайте один срок действия контроллера и выполните там все необходимые функции. В поле expires> index page отображается сообщение об ошибке типа "Пробный период завершен, пожалуйста, подпишитесь ................." как хотите.

Это работает для меня.

6 голосов
/ 16 июня 2011

Просто сохраните дату создания учетной записи пользователя вместе с логическим флагом того, была ли учетная запись оплачена.

Или используйте поле даты, в котором вы устанавливаете последний день, когда пользователь имеет доступ ко всем функциям (и при регистрации вы устанавливаете эту дату равной 30 дням с момента регистрации).

В любом случае, прочитайте данные при входе в систему и отобразите различное содержимое на их основе.

Это было бы моим решением; но я полагаю, что может быть что-то лучше и проще.

Редактировать Я в целом согласен с тем, что @Roland сказал в своем ответе. Логический флаг можно заменить информацией об уровне учетной записи, однако для этого я бы использовал целое число (0 означает пробный, 1 базовый, 2 профессиональный и т. Д.) Над строковым тегом.

Вы также можете автоматически сделать что-то для учетных записей, которые не были оплачены в данный день, запланировав рейк-задачу в cron. Под сделать что-то для Я имею в виду такие вещи, как: сделать недействительным, удалить, изменить уровень на базовый и т. Д.

0 голосов
/ 16 июня 2011

Как предлагает печаль:

Используйте поле даты, в котором вы устанавливаете последний день, когда пользователь имеет доступ ко всем функциям> (и при регистрации вы устанавливаете эту дату равной 30 дням).от регистрации).

Я только перепечатываю, чтобы подчеркнуть, что это лучший вариант, чем сохранение в начале пробного периода, код для проверки первого: trial_expiry > Time.now, тогда как код для проверкиДата начала испытания должна быть более запутанной, и это затруднит обслуживание испытаний различной длины.

Вы можете очистить дату истечения срока действия при покупке учетной записи, не нужно проверять отдельное поле.Какой-то уровень пользователя все еще хорошая идея, но не обязательная для пробной системы.

0 голосов
/ 16 июня 2011

Что сказали Скорбь и Муравей, но вместо логического значения используйте тег для пользователей: Trial, Basic, Pro и т. Д.

0 голосов
/ 16 июня 2011

Почему я подхожу к этому, чтобы установить для пользователя поле trial_started_at и проверять его каждый раз, когда пользователь входит в систему, если только он не приобрел.

...