Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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对象错误_Ruby On Rails - Fatal编程技术网

Ruby on rails 提交分部中的表单时出现nil对象错误

Ruby on rails 提交分部中的表单时出现nil对象错误,ruby-on-rails,Ruby On Rails,轨道2.3.5 我有一个问题,表单选择是否正常工作,除非在提交表单时,我对所使用的数组得到一个零错误。我不理解Select标记是如何工作的,如何生成正确的HTML,但在提交表单时,对数组也给出了一个nil错误。此外,如果我将逻辑从控制器中取出,并将其直接粘贴到partial中,它就可以正常工作。谢谢你的帮助 在控制器中,我有一个“新”方法中的代码: 在“新”视图的分部中,我有以下代码: <%= f.select(:directory_id, @directories, :prompt =&

轨道2.3.5

我有一个问题,表单选择是否正常工作,除非在提交表单时,我对所使用的数组得到一个零错误。我不理解Select标记是如何工作的,如何生成正确的HTML,但在提交表单时,对数组也给出了一个nil错误。此外,如果我将逻辑从控制器中取出,并将其直接粘贴到partial中,它就可以正常工作。谢谢你的帮助

在控制器中,我有一个“新”方法中的代码:

在“新”视图的分部中,我有以下代码:

<%= f.select(:directory_id, @directories, :prompt => 'Select') %>
“选择”)%%>
这将呈现此HTML:

<select id="card_directory_id" name="contact[directory_id]"><option value="">Select</option>
<option value="2">dir_test_1</option>
<option value="4">dir_test_2</option>
<option value="6">dir_test_3</option>
选择
方向测试1
方向测试2
方向测试3
问题是,当我提交表单时,出现以下错误:

你有一个零对象,而你没有 期待吧!你可能会想到 数组的实例。发生了错误 在计算nil.inject时

如果我从控制器中取出逻辑并将其放入部分,则一切正常:

<%= f.select(:directory_id, Directory.find(:all, :conditions => {:id => session[:directories_with_view_access]}).collect {|u| [u.name, u.id]}, :prompt => 'Select') %>
{:id=>session[:directories_with_view_access]}).collect{{u | u |[u.name,u.id]},:prompt=>'Select')%>

您使用select标记不是这里的问题

如果您发布堆栈跟踪,我将能够更好地诊断您的问题,但是根据您所描述的,我猜测您的表单将post请求提交给一个操作,例如
create
,该操作反过来会重定向到一个再次呈现表单部分的页面@目录未在重定向操作中设置,该操作负责将视图呈现为在新操作中设置的视图

在创建操作中查找重定向url,然后确保在该操作中设置了@directories(很可能是
show
操作,如(@object)的
redirect\u to url\u),就像在新操作中一样


这里要理解的关键是什么控制器操作实际上在处理POST请求,什么操作在呈现视图,并确保在那里定义了必要的变量。如果您使用的是传统的Rails体系结构,例如通过script/generate中的脚本为您构建的框架,那么阅读RESTful路由是必不可少的。

您完全正确。创建操作中@directories declaration的副本修复了该问题。我只学了4个月的Rails,仍然对RESTful路线感到迷茫,但我一直在阅读。非常感谢!
<%= f.select(:directory_id, Directory.find(:all, :conditions => {:id => session[:directories_with_view_access]}).collect {|u| [u.name, u.id]}, :prompt => 'Select') %>