Любые советы о том, как реализовать ограничения в приложении Freemium? - PullRequest
1 голос
/ 23 октября 2011

Я новичок в программировании и пытаюсь сделать приложение в стиле freemium с несколькими доступными планами.

Я использую камень cancan, чтобы назначить объектам роль в зависимости от того, на каком плане они находятся (бесплатный, премиум, премиум +).

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

например,

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

В настоящее время планы указаны в модели объекта следующим образом:

PLANS = %w[free premium premium+]

edit

Благодаря ответу Алекса Питти, я думаю, что яСейчас я на правильном пути.

Я изменил строку validate_on_create :photo_count_within_limit на:

validate :venuephoto_count_within_limit, :on => :create

, но получаю ArgumentError в VenuesController # update: сравнение Fixnum с ошибкой nil fail.

еще одно редактирование

Так что теперь все хорошо, просто внесли следующие изменения:

def photo_limit
  {:free => 3, :premium => 10}[plan.to_sym]
end

и

validate :venuephoto_count_within_limit, :on => :create

Спасибо за любую помощь, она очень ценится!

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Я бы дал методы модели Места проведения для photo_limit, tag_limit и т. Д.

class Venue < ActiveRecord::Base

  def photo_limit
    {:free => 3, :premium => 20, :"premium+" => 999}[plan]
  end

end

(это предполагает метод .plan, который вернет план текущего Места проведения)

Затем используйте валидации в Фото, например:

class Photos < ActiveRecord::Base

  belong_to :venue
  validate_on_create :photo_count_within_limit

  def photo_count_within_limit
    if self.venue.photos(:reload).count >= self.venue.photo_limit
      errors.add(:base, "Exceeded venue photo limit")
    end
  end

end
0 голосов
/ 23 октября 2011

По моему текущему проекту у нас тот же вопрос.Я не участвовал в этой части, поэтому я понятия не имею, как это было решено.Может быть, с каким-то глобальным фильтром на ApplicationController, который проверяет разрешения для текущего плана / подплана (да, у нас тоже есть подплан) пользователя.

В понедельник я попытаюсь найти время для проверкикак мы это реализуем и ответим вам.

...