Ruby on rails 验证\u是否存在\u失败时发生Rails错误 NoMethodError in Points#创建 显示/Volumes/EXTERNAL/Proiecte/Roadie/app/views/points/_form.html.erb,其中第20行出现: 你有一个零的对象,当你没有想到它! 您可能期望数组的一个实例。 计算nil.collect时出错 提取的源(第20行附近): 17: 18: 19: 20: 21: 22: 23:

Ruby on rails 验证\u是否存在\u失败时发生Rails错误 NoMethodError in Points#创建 显示/Volumes/EXTERNAL/Proiecte/Roadie/app/views/points/_form.html.erb,其中第20行出现: 你有一个零的对象,当你没有想到它! 您可能期望数组的一个实例。 计算nil.collect时出错 提取的源(第20行附近): 17: 18: 19: 20: 21: 22: 23:,ruby-on-rails,view,erb,Ruby On Rails,View,Erb,本质上,这里发生的是,当表单页面中的一个其他字段(由模型验证)丢失时,rails会抛出上面发布的错误 截面有许多点,当创建新点时,用户应该能够选择父截面 有人能解释为什么会发生这种情况吗?之所以会发生这种情况,是因为@sections实例变量为nil。以下是我根据你的帖子猜测的情况: 您提交的表单包含不完整的数据,需要创建这些帖子。模型未保存,因此您将重新渲染“新建”操作。但是,您忘记在控制器的“新建”操作中重新初始化变量 在Rails中,当您调用render(:action=>'new')时,

本质上,这里发生的是,当表单页面中的一个其他字段(由模型验证)丢失时,rails会抛出上面发布的错误

截面有许多点,当创建新点时,用户应该能够选择父截面


有人能解释为什么会发生这种情况吗?

之所以会发生这种情况,是因为@sections实例变量为nil。以下是我根据你的帖子猜测的情况:

您提交的表单包含不完整的数据,需要创建这些帖子。模型未保存,因此您将重新渲染“新建”操作。但是,您忘记在控制器的“新建”操作中重新初始化变量


在Rails中,当您调用render(:action=>'new')时,它不会执行控制器的'new'方法中的代码。它只是呈现“新”模板,因此您仍然需要设置任何实例变量

之所以发生这种情况,是因为@sections实例变量为nil。以下是我根据你的帖子猜测的情况:

您提交的表单包含不完整的数据,需要创建这些帖子。模型未保存,因此您将重新渲染“新建”操作。但是,您忘记在控制器的“新建”操作中重新初始化变量


在Rails中,当您调用render(:action=>'new')时,它不会执行控制器的'new'方法中的代码。它只是呈现“新”模板,因此您仍然需要设置任何实例变量

那么我该如何重新初始化新操作中的变量呢?最后我将@sections修改为Section。通常,在呈现操作之前,您可以再次调用
new
,或者在控制器中编写一个辅助方法,为
new
create
操作设置任何必要的实例变量。那么如何在新操作中重新初始化变量呢?最后,我将@sections修改为Section。通常,在呈现操作之前,您可以再次调用
new
,或者在控制器中编写一个辅助方法,为
new
create
操作设置任何必要的实例变量。
NoMethodError in Points#create

Showing /Volumes/EXTERNAL/Proiecte/Roadie/app/views/points/_form.html.erb where line #20 raised:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.collect
Extracted source (around line #20):

17:   </div>
18:   <div class="field">
19:     <%= f.label :section %><br />
20:     <%= f.select(:section_id, [["Select a Section name", 0]] + @sections.collect {|p| [ p.name, p.id ] }) %>
21:   </div>
22: 
23:   <div class="field">