2012-12-30 2 views
0

다중 모델 양식이있어서 중첩 모델과 관련된 오류를 캡처 할 수 없습니다. 이것은 Project-> Team-> Roles-> Role_skill_relationship 형식의 계층 구조입니다. 프로젝트 모델 인스턴스 @ 프로젝트와 관련된 오류를 캡처 할 수 있지만 역할 및 기술 모델과 관련된 유효성 검사를 캡처하는 데 실패했습니다. 오류는 화면으로 방향을 바꾸거나 깜박이지 않고 브라우저 페이지에서 직접 반환됩니다. 오류의 한 예 나는 의도적으로 잘못 #이 C보기다중 모델 양식 처리 중 오류

만드는 역할에

NoMethodError 인 형태의 역할 부분을 작성하는 경우 :/사용자/Dstile/문서/GitHub의/creunity_app/응용 프로그램/전경/스킬/광고 # 8 제기 _form.html.erb :

정의 방법 '지도'닐의 경우 : 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 %>' 

역할 양식이 프로젝트에 중첩 된 것과 동일한 방식으로 팀의 팀 형태로 중첩되어에게 렌더링입니다. 내가 이해 한 다른 모든 스레드들로부터 프로젝트와 모든 자식 모델 (team, roles, role_skill_relationships)에 대한 에러는 @parent 객체에 의해 캡쳐되어야한다는 것입니다.

브라우저에서 오류를 무시하도록 설정해야하는 구성 설정이나 코드가 있습니까? 내 생각에 오류가 @ 프로젝트에 있지만이 프로세스가 중단 될 수 있습니다.

답변

0

나타납니다 @skills가 설정되지 않았습니다. 은 전달 된 컬렉션 (이 경우 @skills)에서 #map을 실행하며 컬렉션이 nil (정의되지 않은 인스턴스 변수의 기본값) 인 경우 해당 오류를 표시합니다.

는 컨트롤러의 #create 방법은 단순히 템플릿을 렌더링 할 것이다 유효성 검사 오류의 경우, 그 기억 - 그것은 하지는 해당 템플릿에 해당하는 액션 메소드를 실행한다. 따라서 #new 액션에서 @skills을 정의하는 경우에는 #create 액션 (또는 더 나은 것은 before_filter)에서 정의해야합니다.

+0

그 트릭을했습니다. 고맙습니다! 드롭 다운에서 값을 선택할 때 #create 메서드에서 맵 오류가 발생하지 않았으므로이를 인식하지 못했습니다. – user1906851