Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 表单中的第一个参数不能包含nil或为空-Rails 4_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 表单中的第一个参数不能包含nil或为空-Rails 4

Ruby on rails 表单中的第一个参数不能包含nil或为空-Rails 4,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我在rails中的联系人表单中收到此错误: First argument in form cannot contain nil or be empty 查看: <%= form_for @contact do |f| %> and so on....... 我发现了相关的错误,但没有一个解决方案适合我的特定问题。有什么线索可以说明是什么原因吗?错误消息告诉您不能有以下情况: <%= form_for nil do |f| %> <%= for

我在rails中的联系人表单中收到此错误:

First argument in form cannot contain nil or be empty
查看:

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

我发现了相关的错误,但没有一个解决方案适合我的特定问题。有什么线索可以说明是什么原因吗?

错误消息告诉您不能有以下情况:

<%= form_for nil do |f| %>
<%= form_for [] do |f| %>
尽管不建议使用


您需要检查包含表单的视图是否由
联系人控制器的
新建
操作实际呈现
如果事实上您的实例变量应该是
nil
,您可以使用
:联系
而不是
@contact
,并提供路径

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

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

登录路径仅是一个示例,可以根据需要进行替换。

我遇到了一个类似的问题,我在一个模式中使用了一个表单,该表单更改了一个与背景页面显示的不同的模型。尽管我的联系人控制器中有必需的@contact=contact.new,但我需要在控制器中为后台页面添加此代码

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

class PhoneBook < ApplicationController

  def index
    @contact = Contact.new
    ...
  end
end
class电话簿
然后,PhoneBook index.html上显示的my modal中的表单具有与其他人编写的相同的语法:

<div id="phoneBook">
  <div id="myModal" class="modal">
    <%= form_for @contact do |f| %>
    ...
  </div>
</div>

...

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

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

在我的例子中,我使用的是sublime editor,我的控制器中有一个额外的def,它比新的def高,我不知道它是如何到达那里的,但它就在那里…在大约半个小时的咬指甲后,移除它解决了我的问题。。。可能有任何类型的打字错误导致此问题。这个错误仅仅意味着新方法没有被访问,如果它被访问,它将初始化变量

我重复一遍,总是在某个地方输入错误。


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

这取决于新操作或创建操作的定义位置。我也遇到了同样的问题,结果我不得不将@Object=Object.new命令放在page方法中

例如

class PagesController < ApplicationController

def home
    @applicant = Applicant.new
end

def about
end

def homeowner
end
class PagesController
结束


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

我也有同样的问题,但很容易修复。在您的
#示例posts_controler.rb
中添加同一行以在编辑中查找类似post的内容。在我的应用程序中

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

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

我也有同样的问题。我有一个评论模型、一个评论控制器、一个“show”操作和一个“show”视图。我还在“show”视图中渲染了一个“_show”部分,其中包含以下局部内容:

:locals => {:comment => @comment}
在“秀”部分我有一个

<%= form_for(comment, :remote => true) do |f| %>
而在部分

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

似乎对模型和局部局部使用相同的名称给我造成了一些冲突。

您能验证
@contact
不是
nil
?我猜你的表单是从一个动作中呈现出来的,而不是
联系人#new
。FWIW,你所感受到的挫折感是所有学会编码的人的共同感受——这只是学习外国框架的一个自然部分。我不认为你的问题中有任何抱怨。你能发布堆栈跟踪吗?谢谢@Pierre和所有其他人。这是一个非常简单的问题,我忽略了,而且过于复杂。我没有路由到正确的路径,目录有点混乱。这确实有效!但奇怪的是,为什么不推荐,事实上更好的解决方案是什么?我在控制器中设置了Contact#new action,但如果没有修复,我仍然会出现此错误。@Jackson_Sandland Rails中的MVC逻辑是控制器将实例变量传递给视图。
方法的
form_需要一个模型实例,以便在提交表单后正确构建params散列。看看这本书。您可以在视图中使用
Contact.new
,但这打破了MVC模式,因此您可以完全跳过控制器,并在视图中包含更多逻辑。是否有方法可以重新路由新建、创建、构建…等。对适当的控制器(联系人)执行操作,而不是在电话簿控制器中处理它?我在电话簿控制器中唯一与联系人相关的是初始化新的联系人对象。这是一种防止发生“nil或empty”错误的方法。电话簿控制器中的所有其他内容都与电话簿操作(新建、创建等)相关。您可以使用
在表单顶部指定要使用的控制器和操作。在我的情况下,我在model.save上捕获错误,然后对新视图进行“渲染”。因此,使用render只调用视图,而不是“新建”操作。我遇到了同样的问题,在控制器中定义了两次操作。这对我来说是正确的答案,在控制器的新方法中,我在变量名称上有一个输入错误。
<%= form_for(comment, :remote => true) do |f| %>
:locals => {:new_comment => @comment}
<%= form_for(new_comment, :remote => true) do |f| %>