0

我有一个多模型表单,我似乎无法捕获与嵌套模型相关的错误。这是 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 中,但是这个过程被中断了。

4

1 回答 1

0

好像@skills没有设置。在传入的集合上#collection_select运行(在这种情况下),如果集合是(这是未定义实例变量的默认值),则会显示该错误。#map@skillsnil

请记住,在验证错误的情况下,#create控制器中的方法将只是呈现模板 - 它不会为该模板运行相应的操作方法。因此,如果您@skills在您的#new操作中定义,那么您还需要在您的#create操作中定义它(或者,更好的是,在 a 中before_filter)。

于 2012-12-30T05:47:52.227 回答