При попытке установить ограничения не удалось получить сравнение Fixnum с nil

#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. Удивительно! Большое спасибо! Я вернусь через несколько минут, чтобы отметить это, очень признателен.