验证失败导致零变量

时间:2012-06-21 02:46:54

标签: ruby-on-rails

我在控制器中的新方法中定义了变量@products = Product.all。它包含要在表单上的选择框中显示的db表中的值。

当create方法引发验证错误时,我正在调用render :action => 'new'

所有其他变量似乎都恢复正常,但@products回归为零

我在这里缺少什么。

3 个答案:

答案 0 :(得分:3)

render :action => new要求ActionViewnew操作呈现视图 - 它不会在当前运行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'之前必须实例化在新方法中实例化的任何变量