@RadBrad делает точку, что вы могли бы использовать has_many
на другую модель, которая представляет собой набор из трех баннеров. Возможно, он мог бы назвать BannerSet или аналогичным. Вы могли бы либо создать три сразу, как он сказал, либо в валидации BannerSet, вы можете убедиться, что есть только 3 связанных баннера.
Вы также можете иметь даже 3 атрибута (столбцы) на модели BannerSet, которые будут иметь 3 идентификатора баннеров. Если вы уверены, что это всегда будет 3 баннера, то это может быть прекрасный дизайн.
Но вот как вы это сделаете, если бы у вас был только контроллер для Banner, который не будет лучшим способом, как вы увидите.
Во-первых, вы могли бы использовать declarative authorization в контроллере:
authorization do
has_permission_on :banners, :to => [:new, :create] do
Banner.count < 3
end
end
Чтобы убедиться, что вы все еще не можете добавить баннер, даже если он был добавлен после того, как вы получили на экран создания, чтобы добавить его, а также добавить валидацию модели Баннер:
before_create :validate_max_banners
def validate_max_banners
errors.add_to_base("Only 3 banners are allowed.") if Banner.count == 3
errors.empty?
end
Ни будет полностью гарантировать, что вы можете иметь только 3 строки в этой таблице, хотя. Для этого вам понадобится триггер или аналогичный на стороне БД, как описано в this q&a. Но для базового решения это может быть хорошо.
Обратите внимание, что даже если RailsAdmin могут быть сконфигурированы и настроены довольно легко (см его wiki документации), я бы также рассмотреть возможность использования ActiveAdmin, если вам нужно много больше настроек.