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

时间:2013-03-13 07:40:10

标签: ruby-on-rails ruby

我无法弄清楚为什么我会收到此错误,以及它的含义。

  

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

添加新帖子

<%= form_for @post do |f| %>  //Error here
<p>
    <%= f.label :title, 'Title' %><br/>
    <%= f.text_field :title %><br/>
</p>
<p>
    <%= f.label :content, 'Content'%><br/>
    <%= f.text_area :content %><br/>
</p>
<p>
    <%= f.submit "Add a New Post" %>
</p>
<% end %>

控制器:

class PostsController < ApplicationController
    def index
        @posts = Post.all
    end

    def show
        @post = Post.find(params[:id])
    end

    def new
        @post = Post.new
    end

    def create
        @post = post.new(params[:post])

        if @post.save
            redirect_to posts_path,  :notice => "Your post was saved"
        else
            render "new"
        end
    end

    def edit

    end

    def update

    end

    def destroy

    end
end

5 个答案:

答案 0 :(得分:17)

假设您要从PostsController呈现此内容并使用传统的视图名称,您的new方法应该创建一个新的Post并分配它:

def new
  @post = Post.new
end

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

如果你想看看它通常看起来如何,创建一个新的Rails项目并使用脚手架生成器来创建一些示例代码。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您的@postnil

您应该form_for Post代替新帖子。

答案 3 :(得分:0)

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

  1. 当您尝试访问未定义或拼写错误的实例变量时。例如,如果您定义类似

    ,则在控制器中
    def new
      @post = Post.new
     end
    
  2. 并尝试在视图中访问

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

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

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

答案 4 :(得分:0)

我收到了同样的错误消息。当我收到此错误消息并认为没有安装simpleform时,我只是试图简化并运行并在我的视图中创建一个子目录来测试表单。

我认为像@user这样的实例变量可用于我的所有视图文件,包括那些用于创建新客户端的@clients子目录和clients/_form。我的假设不正确,因为@userNil控件中创建clients/_form时使用@user时将评估为NSLocale.preferredLanguages[0]