我有一个多模型表单,我似乎无法捕获与嵌套模型相关的错误。这是 Project->Team->Roles->Role_skill_relationship 形式的层次结构。我能够捕获与项目模型实例 @project 相关的错误,但我未能成功捕获与角色和技能模型相关的验证。错误直接在浏览器页面中返回,而不是重定向并闪烁到屏幕上。如果我故意错误地填写表格的角色部分,则错误的一个示例是
角色中的 NoMethodError#create
显示 C:/Users/Dstile/Documents/GitHub/creunity_app/app/views/skills/_form.html.erb 其中第 8 行提出:
nil:NilClass 的未定义方法 `map' 提取的源代码(第 8 行附近)
7: <%= Skill_form.label :skill %>
8: <%= Skill_form.collection_select :skill_id, @skills, :id, :name, :prompt => "选择一个>技能" %>
这是代码的一部分
<%= render 'shared/project_error_messages' %>
<%= project_form.label :title %>
<%= project_form.text_field :title %>
<%= project_form.label :category, "Category" %>
<%= project_form.select(:category, Project::CATEGORY_TYPES) %>
<%= project_form.label :description %>
<%= project_form.text_area :description %>
<%= project_form.label :goal_1, "Goal 1:" %>
<%= project_form.text_field :goal_1 %>
<h2>Your Team</h2>
<%= project_form.fields_for :team do |f| %>
<%= render 'teams/form', :team_form => f %>
<% end %>`
这是错误渲染代码
'<% if @project.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(@project.errors.count, "error") %>.
</div>
<ul>
<% @project.errors.full_messages.each do |msg| %>
<li>* <%= msg %></li>
<% end %>
</ul>
</div>
<% end %>'
角色表单嵌套在团队表单中,就像团队嵌套在项目中一样。从我读过的所有其他线程中,我的理解是项目及其所有子模型(团队、角色、role_skill_relationships)的错误应该由@parent 对象捕获。
是否有我缺少的配置设置或一段代码应该强制浏览器忽略错误?我的想法是错误可能在@project 中,但是这个过程被中断了。