表单中的第一个参数不能包含零或为空 – 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| %>
虽然不推荐 。
您需要检查包含您的表单的视图实际上是由您的ContactsController
的new
操作呈现的。
我有一个类似的问题,我有一个模式的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
结束
我之前定义了一个“新”和“创造”的方法,并在他们的行动是平常的,我在其他情况下做。 仍然不知道为什么。