Ограничения подписки на Rails

У меня есть приложение с установленными ограничениями на атрибуты подписки, т. е. у пользователя может быть пять проектов для подписки A, но десять для подписки B.

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

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

Как насчет прямых запросов PUT и т. д.?


person David Lyod    schedule 17.06.2010    source источник


Ответы (2)


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

class Project

  belongs_to :user

  validate_on_create :subscription_allows_new_project

  def subscription_allows_new_project
    unless self.user.subscription.max_projects > self.user.projects.count
      errors.add_to_base("Project limit reached, please upgrade today!")
    end
  end

end
person Brent M    schedule 19.06.2010
comment
Очень просто и так очевидно теперь, когда вы это написали :) - person David Lyod; 19.06.2010
comment
На самом деле это довольно элегантное решение этой проблемы. Может быть, у кого-нибудь из вас есть похожее решение проблемы, с которой я сталкиваюсь: stackoverflow.com/questions/4631218/? - person marcamillion; 09.01.2011

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

<% if has_user_hit_project_limits %>
Upgrade Now!
<% else %>
Add project
<% end %>

def has_user_hit_project_limits
    if #logic
        true
    else
        false
    end
end
person Tom    schedule 17.06.2010