Если номера плана находятся в базе данных, и есть Plan
модель, то вы могли бы просто сказать что-то вроде:
@plan = Plan.find_by(:id => params[:plan])
if([email protected])
flash[:notice] = "Please select a membership plan to register."
redirect_to root_url
end
сейчас у вас есть доступ к полной информации о плане для следующего представления, чтобы вы могли показать им имя, описание, цену и ..., а существование плана хранится только в одном месте (т.е. в базе данных). Если вам не нужно @plan
, то вы могли бы сказать:
if(!Plan.where(:id => params[:plan]).exists?)
...
end
Важным моментом является то, что должно быть ровно одна вещь, которая знает, что действительные планы и в любое время вы должны знать о планах, вы спросите, что одно и только одно.
мнение, что в конечном итоге вызова select_plan
также использовать базу данных (вместо буквенных чисел от одного до восьми), чтобы получить действительные планы:
<% Plan.order(...).each do |p| %>
whatever you need to display the plan as an option...
<% end %>
Добавить новый план в базу данных и все еще работает , Удалите/отключите план и все еще работает. Ваше программное обеспечение будет легче поддерживать, иметь меньше ошибок, быть более понятным, и вы приобретете новую хорошую привычку, а не плохую.
Откуда берутся действительные номера плана? Они происходят из базы данных? Есть ли константа, которая их где-то определяет? Являются ли они магическими числами, посыпанными по всему коду? –
Я прошу, потому что наличие факта «6 является действительным планом», сидящего только в методе контроллера или в нескольких разных местах, это то, что вам нужно для рефакторинга, а не громоздкая реализация, которую вы используете в 'select_plan'. Исправьте основную проблему, и 'select_plan' очистится как побочный эффект. –
@muistooshort - Извините, мой уровень опыта. Действительные номера плана присутствуют в базе данных. Меня интересует то, что вы можете сказать. Я не совсем уверен в этом. –