#ruby-on-rails #ruby-on-rails-3 #comparison #fixnum
#ruby-on-rails #ruby-on-rails-3 #сравнение #fixnum
Вопрос:
В моем приложении у меня есть таблица мест, где каждое может быть либо бесплатным, либо премиум-планом, и у каждого может быть несколько venuephotos.
Я пытаюсь настроить его так, чтобы в бесплатных местах могло быть максимум 3 venuephotos, в то время как в премиум-местах может быть до 10 venuephotos.
Venue.rb
Планы задаются как:
PLANS = %w[free premium]
Ограничение venuephoto также устанавливается как:
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
Большое спасибо за любую помощь!
Ответ №1:
Ваш {:free => 3, :premium => 10}
хэш использует символы в качестве индексов, а план будет строкой.
def photo_limit
{:free => 3, :premium => 10}[plan.to_sym]
end
будет работать
Комментарии:
1. Удивительно! Большое спасибо! Я вернусь через несколько минут, чтобы отметить это, очень признателен.