我是一个苦苦挣扎的新手编程,并试图制作一个有多种计划的免费增值应用程序。
我正在使用康康宝石为场地分配角色,具体取决于他们的计划(免费,高级,高级+)。
我知道如何根据分配的计划来限制视图中显示的某些选项,但是如何根据分配的计划来限制添加到场地的记录数量?
e.g。
目前,该计划仅在场地模型中指定为:
PLANS = %w[free premium premium+]
修改
感谢Alex Peattie的回答,我觉得我现在正走在正确的轨道上。
我将行validate_on_create :photo_count_within_limit
更改为:
validate :venuephoto_count_within_limit, :on => :create
但是在VenuesController#update中得到一个ArgumentError:Fixnum与nil的比较失败错误。
其他编辑
所以一切都很好,只是做了这些改变:
def photo_limit
{:free => 3, :premium => 10}[plan.to_sym]
end
和
validate :venuephoto_count_within_limit, :on => :create
感谢任何帮助,非常感谢!
答案 0 :(得分:2)
我会为photo_limit
,tag_limit
等提供场地模型方法。
class Venue < ActiveRecord::Base
def photo_limit
{:free => 3, :premium => 20, :"premium+" => 999}[plan]
end
end
(这假设.plan
方法将返回当前Venue的计划)
然后在Photo中使用验证,如下所示:
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
答案 1 :(得分:-1)
在我目前的项目中,我们有同样的问题。我没有参加那个部分,所以我不知道它是如何解决的。也许在ApplicationController上使用某种全局过滤器来检查用户当前计划/子计划(是的,我们也有子计划)的权限。
星期一,我会试着找一些时间来检查一下我们如何实现这个并回答你。