#ruby-on-rails #ruby-on-rails-3 #formtastic
#ruby-on-rails #ruby-on-rails-3 #formtastic
Вопрос:
Я использую Formtastic 2 для вложенной формы — у меня есть модель меню и питания, в меню много блюд, каждое блюдо относится к одному меню. Я добавил форму приема пищи в действие отображения меню, прямо под списком уже связанных блюд.
Создание блюд работает нормально, если проверка прошла успешно, я снова перехожу к действию «Показать меню» с перечислением созданного блюда в списке.
Но когда питание не проверяется, и я снова перехожу к действию меню «Показать» с соответствующим флэш-сообщением, мне бы очень хотелось заполнить форму данными, которые были отправлены ранее, и отобразить ошибки рядом с ним.
Я пробовал с этим перенаправлением:
redirect_to(menu_path(menu,@meal), :alert => 'The meal was not created')
Но я не могу получить переменную meal и передать ее обратно в форму таким образом, сам запрос является запросом GET только с идентификатором меню.
Ответ №1:
Вы не должны перенаправлять после ошибок проверки, потому что вы потеряете все состояние. Просто старый шаблон непосредственно после неудачной проверки. Небольшая ошибка заключается в том, что вам нужно использовать flash.now[:alert]
, чтобы она не переходила на следующую страницу.
Обычно у вас будет такая структура:
def new
@meal = Meal.new
end
def create
@meal = Meal.new(params[:meal])
if @meal.save
flash[:notice] = "Meal was created"
redirect_to menu_path(menu, @meal)
else
flash.now[:alert] = "The meal was not created"
render :new
end
end
Комментарии:
1. Вы правы, хотя я обнаружил, что моей первоначальной проблемой было неправильное понимание структуры контроллера. У меня были MenuController и MealController с полным CRUD — но при добавлении блюд в действие показа меню код для добавления блюда, вероятно, должен быть в MenuController, когда это единственное место, где создаются блюда. Я могу полностью избавиться от MealController.