Form_for“表单中的第一个参数不能包含nil或为空”错误

我无法弄清楚为什么我会收到这个错误,这究竟是什么意思。

表单中的第一个参数不能包含nil或为空(第3行)

添加新post

 //Error here 





控制器:

 class PostsController  "Your post was saved" else render "new" end end def edit end def update end def destroy end end 

假设您从PostsController渲染并使用传统的视图名称,您的new方法应该创建一个新的Post并分配它:

 def new @post = Post.new end 

您可以使用类名(如@Yuriy建议的那样),但传统方法是实例化一个新对象。 这允许您在保存后重复使用相同的表单视图来呈现错误。

如果您想了解这通常看起来如何,请创建一个新的Rails项目并使用scaffold生成器创建一些示例代码。

使用此(不推荐)。 它应该工作。

 <%= form_for Post.new do |f| %> 

你的@postnil

你应该form_for Post而不是新post。

要了解此错误,有两个具体原因可以解决此错误。

  1. 当您尝试访问未定义或拼写错误的实例变量时。 例如,在您的控制器中,如果您定义喜欢

     def new @post = Post.new end 

并尝试在视图中访问

  <%= form_for @posts method: :post do |f| %> #plural name 

在上述情况下,您会得到相同的错误。

另一种情况是,如果您没有定义实例或者没有在控制器中分配实例变量并尝试在视图中访问它,您将得到相同的错误。

我收到了相同的错误消息。 当我收到此错误消息并认为未安装simpleform时,我只是试图简单地完成并工作并在我的视图中创建了一个用于测试表单的子目录。

我假设像@user这样的实例变量可用于我的所有视图文件,包括@clients子目录和用于创建新客户端的clients/_form 。 我的假设是不正确的,因为在@user控制器中创建clients/_form时, @user将评估为Nil