在我的应用程序中,我有一个场地表,每个场地都可以是免费或高级计划,每个都可以有多个场地照片。
我正在尝试设置它,以便免费场地最多可以有3个场地照片,而高级场地最多可以有10个场地照片。
Venue.rb
计划设定为:
PLANS = %w[free premium]
场地照片限制也设置为:
def photo_limit
{:free => 3, :premium => 10}[plan]
end
Venuephoto.rb
然后我要检查是否已达到限制:
validate :venuephoto_count_within_limit, :on => :create
def venuephoto_count_within_limit
if self.venue.venuephotos(:reload).count >= self.venue.photo_limit
errors.add(:base, "Exceeded venue photo limit")
end
end
这给了我这个错误:
ArgumentError in VenuesController#update
comparison of Fixnum with nil failed
场地控制器
def update
@venue = Venue.find(params[:id])
if @venue.update_attributes(params[:venue])
flash[:notice] = 'Venue updated successfully'
redirect_to :back
end
end
非常感谢您的帮助!
答案 0 :(得分:3)
您的{:free => 3, :premium => 10}
哈希使用符号作为索引,计划将是一个字符串。
def photo_limit
{:free => 3, :premium => 10}[plan.to_sym]
end
将起作用