nil*_*nil 40 ruby-on-rails ruby-on-rails-4
我在rails中的联系表单中收到此错误:
First argument in form cannot contain nil or be empty
Run Code Online (Sandbox Code Playgroud)
视图:
<%= form_for @contact do |f| %>
and so on.......
Run Code Online (Sandbox Code Playgroud)
调节器
def new
@contact = Contact.new
end
and so on....
Run Code Online (Sandbox Code Playgroud)
我发现了相关的错误,但没有一个解决方案似乎符合我的特定问题.可能导致这种情况的任何线索?
Pie*_*ois 74
错误消息告诉您不能具有以下内容:
<%= form_for nil do |f| %>
<%= form_for [] do |f| %>
Run Code Online (Sandbox Code Playgroud)
我的猜测是你@contact的设定,nil并不是你的Contact#new行动.
仅供参考,如果您这样做,它将会起作用:
<%= form_for Contact.new do |f| %>
Run Code Online (Sandbox Code Playgroud)
虽然不推荐.
您需要检查包含表单的视图是否实际由new您的操作呈现ContactsController.
我有一个类似的问题,我在模态中有一个表单,对模型的更改与后台页面显示的不同.即使我在我的Contact控制器中有所需的@contact = Contact.new,我还需要在控制器中为后台页面添加此代码.
例如,我有一个PhoneBook模型,在我的PhoneBook索引视图中,我有一个模式,其中有一个表单,可以将联系人添加到我的Contact模型中.我需要在我的PhoneBook控制器中的索引方法中使用@contact = Contact.new:
class PhoneBook < ApplicationController
def index
@contact = Contact.new
...
end
end
Run Code Online (Sandbox Code Playgroud)
然后我在我的模态中显示在PhoneBook index.html上的表单与其他人编写的语法相同:
<div id="phoneBook">
<div id="myModal" class="modal">
<%= form_for @contact do |f| %>
...
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我知道这有一个公认的答案,但这并没有解决我同样的问题(我不想在我的观点中使用新的),我打算发布解决了我的问题.
这总是一个错字,您可以检查您的路线$rake routes是否路线是否正常,而不是其他地方的某种类型.
在我的情况下,我使用了崇高的编辑器,我在我的控制器中有一个额外的def高于def new,我不知道它是如何到达那里的,但它就在那里...删除它解决了我的问题大约半小时后指甲咬...可能有任何一种错字导致这个问题.此错误仅表示未访问新方法,如果正在访问它,则会初始化变量.
我再说一遍,总是在某处错字.
希望这有助于任何人.