2012-12-30 54 views
0

我有一個多模型的形式,我似乎無法捕捉有關嵌套模型的錯誤。這是Project-> Team-> Roles-> Role_skill_relationship形式的層次結構。我能夠捕獲與項目模型實例@project有關的錯誤,但是我未能捕獲與角色和技能模型相關的驗證。錯誤直接返回到瀏覽器頁面,而不是重定向並閃爍到屏幕上。一個錯誤的一個例子,如果我故意填寫表格的作用部分錯誤地是錯誤處理多模型形式

在角色#創建

顯示 ÇNoMethodError:/用戶/ Dstile /文檔/ GitHub的/ creunity_app /應用程序/視圖/技能/ _form.html.erb 其中線#8提出:

未定義的方法`地圖」的零:NilClass提取的源(圍繞線#8)

7:<%= skill_form.label:技能%>
8:<%= skill_form.collection_select:skill_id也,@skills,:ID,:姓名,:提示=> 「選擇>技能」 %>

下面是代碼的一部分

<%= 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中,但是這個過程被中斷了。

回答

0

看來@skills尚未設置。 #collection_select在傳入的集合上運行#map(在這種情況下爲@skills),如果集合爲nil(這是未定義的實例變量的默認值),將顯示該錯誤。

記住的是,在驗證錯誤的情況下,在你的控制器#create方法僅僅是渲染一個模板 - 它運行該模板對應的操作方法。因此,如果您在#new操作中定義了@skills操作,那麼您還需要在#create操作中定義它(或更好地在before_filter中)。

+0

這樣做。謝謝!我沒有意識到,因爲當我從下拉列表中選擇數值時,它不會在#create方法中拋出映射錯誤。 – user1906851