Rails 3.1嵌套表单验证

时间:2011-10-08 20:25:13

标签: ruby-on-rails ruby-on-rails-3 formtastic

我正在使用Formtastic 2作为嵌套表格 - 我有菜单和餐饮模式,菜单有很多餐点,每餐都属于一个菜单。 我将菜单添加到菜单显示操作中,就在已经关联的菜单列表下方。

如果验证成功,创建餐饮工作正常,我转到菜单显示操作再次列出列表中创建的餐点。

但是当用餐没有得到验证并且我使用适当的flash消息转发到菜单show动作时,我真的想用之前提交的数据填写表单并在其旁边呈现错误。

我试过这个重定向:

redirect_to(menu_path(menu,@meal), :alert => 'The meal was not created')

但是我无法获得这个变量并以这种方式将其传回给表单,请求本身就是一个只有菜单ID的GET请求。

1 个答案:

答案 0 :(得分:2)

您不应在验证错误后重定向,因为您将失去所有状态。验证失败后直接使用旧模板。有点问题是你需要使用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