43

我在 Rails 中的联系表格中收到此错误:

First argument in form cannot contain nil or be empty

看法:

     <%= form_for @contact do |f| %>
     and so on.......

控制器

def new
    @contact = Contact.new
end
 and so on....

我发现了相关的错误,但似乎没有一个解决方案适合我的特定问题。任何可能导致这种情况的线索?

4

7 回答 7

79

错误消息告诉您不能拥有以下内容:

<%= form_for nil do |f| %>
<%= form_for [] do |f| %>

我在这里的猜测是,您@contact的设置为nil并且它不是来自您的Contact#new操作。

仅供参考,如果您这样做,它只会起作用:

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

虽然不推荐

您需要检查包含表单的视图是否实际上是由new您的ContactsController.

于 2013-09-17T15:51:05.827 回答
6

我有一个类似的问题,我有一个模态表单,它对与背景页面显示的模型不同的模型进行了更改。即使我的联系人控制器中有所需的@contact = Contact.new,我仍需要在控制器中为后台页面添加此代码。

例如,我有一个 PhoneBook 模型,并且在我的 PhoneBook 索引视图中,我有一个带有将联系人添加到我的联系人模型的表单的模式。我需要在电话簿控制器的索引方法中使用@contact = Contact.new:

class PhoneBook < ApplicationController

  def index
    @contact = Contact.new
    ...
  end
end

然后在 PhoneBook index.html 上显示的模态中的表单具有与其他人编写的相同的语法:

<div id="phoneBook">
  <div id="myModal" class="modal">
    <%= form_for @contact do |f| %>
    ...
  </div>
</div>
于 2016-07-14T22:17:22.087 回答
6

我知道这有一个公认的答案,但这并没有解决我同样的问题(我不想使用 new 在我看来),我打算发布解决我的问题。

这总是一个错字,如果路线正常,您可以检查您的路线$rake routes,而不是其他地方的某种类型。

就我而言,我使用的是 sublime 编辑器,并且我在控制器中的 def new 之上有一个额外的 def,我不知道它是如何到达那里的,但它就在那里......大约半小时后删除它解决了我的问题咬指甲...可能有任何类型的错字导致此问题。这个错误只是意味着新方法没有被访问,如果它被访问,它将初始化变量。

我再说一遍,总是在某个地方打错字。

希望这对任何人都有帮助。

于 2016-09-15T07:01:42.920 回答
2

如果实际上您的实例变量应该是nil,您可以使用 :contact代替@contact并提供路径。

在您的情况下,代码应该是,

<%= form_for( :contact , :html => {:class => "form-horizontal", :role => "form"}, url: login_path) do |form| %>

login_path只是一个示例,可以根据需要进行替换。

于 2016-02-17T12:06:10.547 回答
1

我有同样的问题,但很容易修复。在您#example posts_controler.rb添加同一行以在编辑中查找帖子。在我的应用程序中

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

它在这里不起作用,因为我添加了它但没有保存我的更改;)。

于 2018-08-07T09:43:25.593 回答
0

它可能取决于定义新操作或创建操作的位置。我有同样的问题,结果我不得不将@Object = object.new 命令放在页面方法中。

例如..

class PagesController < ApplicationController

def home
    @applicant = Applicant.new
end

def about
end

def homeowner
end

结尾

我之前定义了一个“新”和“创建”方法,并在其中执行了通常的操作,我在其他情况下也这样做。还是不知道为什么。

于 2016-10-30T17:33:38.757 回答
0

我有同样的问题。我有一个 Comment 模型、一个 CommentsController、一个“显示”操作和一个“显示”评论视图。我在“显示”视图中也有一个“_show”部分呈现,具有以下本地:

:locals => {:comment => @comment}

在'_show'部分里面我有一个

<%= form_for(comment, :remote => true) do |f| %>

它通过“表单中的第一个参数不能包含 nil 或为空”。我只能通过重命名本地来解决问题:

:locals => {:new_comment => @comment}

并在部分内:

<%= form_for(new_comment, :remote => true) do |f| %>

似乎对模型使用相同的名称并且部分本地对我造成了一些冲突。

于 2020-05-06T08:06:27.560 回答