Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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 (@model)的表格不';t需要实例化的@model—;还是这样?_Ruby On Rails_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails (@model)的表格不';t需要实例化的@model—;还是这样?

Ruby on rails (@model)的表格不';t需要实例化的@model—;还是这样?,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,最初,我在ThingsController中为(@thing)创建了一个对应于create操作的表单。成功了。然后,我决定将表单移动到它通常的位置,/things/new.html.erb,表单停止渲染。它给出了以下错误: undefined method `model_name' for NilClass:Class 所以我在@thing=thing.new动作中添加了@thing=thing.new,一切都很好。但是请注意,当表单位于另一个控制器视图的其他位置时,我不必实例化@thing

最初,我在ThingsController中为(@thing)创建了一个对应于
create
操作的表单。成功了。然后,我决定将表单移动到它通常的位置,
/things/new.html.erb
,表单停止渲染。它给出了以下错误:

undefined method `model_name' for NilClass:Class
所以我在
@thing=thing.new
动作中添加了
@thing=thing.new
,一切都很好。但是请注意,当表单位于另一个控制器视图的其他位置时,我不必实例化
@thing


这让我想知道为什么Rails会做出看似武断的决定,要求在一个地方实例化,而不是在另一个地方。有人有答案吗?

使用(:东西)的
form\u
。它将检测到一个实例变量names@thing,但如果它为nil,它仍然可以工作。

您可能正在new.html.erb的某个地方调用该对象。发布你的代码。对,它正被(@thing)的表单_调用。这就是页面上所有的代码,再加上表单元素。我从来没有能够通过
form\u来获得
nil
对象。也许你遗漏了什么?最初你不能移动你的_form.html.erb文件,它应该放在/app/tings/_form.html.erb中,并从新的.html.erb文件(或edit.html.erb)中呈现。就是这样!但是有了这个,表单被发布到
/things/new
而不是
/things
,需要添加
:url=>{:action=>“create”,:controller=>“things”},
。我还是喜欢这种方式,因为它是明确的,不需要@thing的任意实例化。你认为这值得开一张罚单吗?这不是一个bug,但似乎是不一致的行为。