我在控制器中的新方法中定义了变量@products = Product.all
。它包含要在表单上的选择框中显示的db表中的值。
当create方法引发验证错误时,我正在调用render :action => 'new'
。
所有其他变量似乎都恢复正常,但@products回归为零
我在这里缺少什么。
答案 0 :(得分:3)
render :action => new
要求ActionView
为new
操作呈现视图 - 它不会在当前运行new
操作控制器,正如您所料。
来自http://guides.rubyonrails.org/layouts_and_rendering.html#using-render:
将
render
与:action
一起使用是Rails新手常常引起混淆的原因。指定的操作用于确定要呈现的视图,但Rails不会在控制器中运行该操作的任何代码。在调用render
之前,必须在当前操作中设置视图中所需的任何实例变量。
答案 1 :(得分:1)
而不是render :action => :new
,您可以使用redirect_to :action => :new
。这将正确加载所有实例变量,而不是强制您复制new
操作中的整个create
逻辑。
答案 2 :(得分:0)
render :action => 'new'
仅呈现视图,不会在控制器中调用新方法。因此,在调用render :action => 'new'
之前必须实例化在新方法中实例化的任何变量