表单中的第一个参数不能包含零或为空 – Rails 4

我在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.... 

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

错误消息告诉你,你不能有以下内容:

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

我的猜测是你的@contact被设置为nil ,并且它不是来自你的Contact#new动作。

仅供参考,如果你这样做,它会简单地工作:

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

虽然不推荐

您需要检查包含您的表单的视图实际上是由您的ContactsControllernew操作呈现的。

我有一个类似的问题,我有一个模式的forms,使模型的变化与背景页面显示不同。 即使我在我的联系人控制器中有必要的@contact = Contact.new,我需要在控制器中添加这个代码为背景页面。

例如,我有一个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> 

我知道这有一个公认的答案,但是这并没有解决我的同样的问题(我不想用新的在我看来),我打算张贴什么解决我的。

这总是一个错字,你可以用$rake routes检查你的路由,如果路由是好的,比其他地方的某种types。

在我的情况下,我正在使用崇高的编辑器,我有一个额外的def高于我的控制器def新的,我不知道它是如何到达那里,但它在那里…移除它解决了我的问题后大约半小时的指甲咬伤…可能有任何一种打字造成这个问题。 这个错误只是意味着新的方法没有被访问,如果它被访问,它会初始化variables。

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

希望这有助于任何人。

如果实际上你的实例variables应该是nil ,你可以使用:contact而不是@contact并提供一个path。

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

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

login_path只是一个例子,可以根据需要进行replace。

它可以取决于您的新build或创build操作的定义。 我有同样的问题,原来我不得不把@Object = object.new命令内的页面方法。

例如..

 class PagesController < ApplicationController def home @applicant = Applicant.new end def about end def homeowner end 

结束

我之前定义了一个“新”和“创造”的方法,并在他们的行动是平常的,我在其他情况下做。 仍然不知道为什么。