错误处理多模型表单

时间:2012-12-30 05:07:13

标签: ruby-on-rails error-handling multi-model-forms

我有一个多模型表单,我似乎无法捕获与嵌套模型相关的错误。这是表单Project-> Team-> Roles-> Role_skill_relationship的层次结构。我能够捕获与项目模型实例@project相关的错误,但是我没有成功捕获与角色和技能模型相关的验证。错误直接在浏览器页面中返回,而不是重定向和闪烁到屏幕。如果我故意错误地填写表单的角色部分,则会出现错误的一个示例

  

角色#create中的NoMethodError

     

显示    C:/Users/Dstile/Documents/GitHub/creunity_app/app/views/skills/_form.html.erb    第8行引出的地方:

     

nil的未定义方法`map':NilClass提取的源(第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中,但是这个过程被中断了。

1 个答案:

答案 0 :(得分:0)

似乎尚未设置@skills#collection_select在传入的集合(本例中为#map)上运行@skills,如果集合为nil(这是undefined的默认值),则会显示该错误实例变量)。

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