我@products = Product.all
在控制器的新方法中定义了一个变量。它包含来自 db 表的值,这些值将显示在表单上的选择框中。
当 create 方法引发验证错误时,我正在调用render :action => 'new'
.
所有其他变量似乎都恢复正常,但 @products 以 nil 的形式返回
我在这里想念什么。
我@products = Product.all
在控制器的新方法中定义了一个变量。它包含来自 db 表的值,这些值将显示在表单上的选择框中。
当 create 方法引发验证错误时,我正在调用render :action => 'new'
.
所有其他变量似乎都恢复正常,但 @products 以 nil 的形式返回
我在这里想念什么。
render :action => new
要求ActionView
渲染该操作的视图new
——它不会new
在当前控制器中运行该操作,如您所料。
来自http://guides.rubyonrails.org/layouts_and_rendering.html#using-render:
使用
render
with:action
是 Rails 新手经常感到困惑的原因。指定的操作用于确定要呈现哪个视图,但 Rails 不会在控制器中运行该操作的任何代码。您在视图中需要的任何实例变量都必须在调用之前在当前操作中设置render
。
而不是render :action => :new
,您可以使用redirect_to :action => :new
. 这将正确加载所有实例变量,而不是强迫您在操作中复制整个new
逻辑create
。
祝你好运!
render :action => 'new'
只渲染一个视图,不调用控制器中的新方法。因此,在新方法中实例化的任何变量都必须在调用之前立即实例化render :action => 'new'